Клиент-серверное приложение с использованием технологии цифровой подписи на языке программирования Java

Сравнение двух языков программирования в рамках реализации цифровой подписи: C# и Java. Инструменты криптографических библиотек языка Java. Этапы алгоритма цифровой подписи. Рациональность использования цифровой подписи в электронном документообороте.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 15.09.2012
Размер файла 547,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru/

Размещено на http://allbest.ru/

Казанский (Приволжский) Федеральный Университет

Институт Вычислительной математики и информационных технологий

Кафедра Экономической кибернетики

Курсовая работа

Клиент-серверное приложение с использованием технологии цифровой подписи на языке программирования Java.

Выполнила: Горелкина Мария

НАУЧНЫЙ РУКОВОДИТЕЛЬ: Пинягина Ольга Владиславовна

Казань 2012

Содержание

  • Введение
  • Постановка задачи
  • Практическая реализация
  • Сравнительный обзор
  • Заключение
  • Список используемой литературы
  • Приложение

Введение

Электронно-цифровая подпись (ЭЦП) -- электронный аналог собственноручной подписи -- используемый в системах электронного документооборота для придания электронному документу юридической силы, равной бумажному документу, подписанного собственноручной подписью правомочного лица и/или скрепленного печатью. Документ (файл), подписанный ЭЦП, гарантированно защищен от изменений -- проверка подписи мгновенно выявит расхождение.

ЭЦП обеспечивает проверку целостности документов, конфиденциальность, установление лица, отправившего документ. Это позволяет усовершенствовать процедуру подготовки, доставки, учета и хранения документов, гарантировать их достоверность. Главное преимущество использование ЭЦП -- значительное сокращение временных и финансовых затрат на оформление и обмен документацией. Таким образом, по функциональности ЭЦП даже превосходит обычную подпись.

Рассмотрим практический пример использования описанной выше технологии. Предположим, Алиса послала Бобу сообщение, а Боб хочет удостовериться, что сообщение пришло именно от Алисы, а не от какого-нибудь самозванца. Для этого Алиса подписывает (sign) сообщение с помощью своего закрытого ключа. Боб получает копию открытого ключа Алисы и с его помощью проверяет (verify) подпись. Если проверка прошла успешно, то Боб точно знает, что

1. Сообщение не было изменено.

2. Сообщение было послано Алисой, а не кем-то другим.

Закрытый ключ должен быть надежно спрятан. Если он будет перехвачен злоумышленником, то Боб может получить от имени Алисы ложную информацию, которую Алиса на самом деле не отправляла.

Клиент-серверное приложение выбрано для демонстрации возможностей ЭЦП не случайно. Так как обычно передача файлов и сообщений происходит в рамках не одного компьютера, а целой сети.

Постановка задачи

  • Задача данной курсовой работы состояла в разработке клиент-серверного приложения, реализующего цифровую подпись.
  • Приложение должно было производить следующие действия:
  • - Подпись документа и передача его с клиента на сервер,
  • - Проверка достоверности данных и занесение их в базу,
  • - Повторная проверка документа на изменение информации.
  • Для выполнения каждого из этапов используется алгоритм электронной цифровой подписи DSA.
  • Схема электронной подписи обычно включает в себя:
  • 1) Алгоритм генерации ключевых пар пользователя (открытого и закрытого);
  • 2) Алгоритм вычисления подписи (при помощи закрытого ключа);
  • 3) Алгоритм верификации подписи (при помощи открытого ключа).
  • Генерация ключевой пары и подпись документа производится на клиенте, после чего верификация подписи, проверка достоверности данных и ключа производится на стороне сервера.
  • Ранее мной уже был реализован алгоритм цифровой подписи инструментами языка программирования C#, поэтому в данной работе в рамках постановки задачи так же необходимо выделить, как одну из целей разработки, изучение и сравнение инструментов разработки ЭЦП в разных языках программирования.

Практическая реализация

Для решения практической задачи в рамках учебной практики в течение семестра мной было разработано клиент-серверное приложение, которое обладало возможностью передачи файлов с клиента на сервер и сохранения информации о них в базе данных.

В ходе реализации цифровой подписи на базе исходного приложения, мне понадобилось подключение следующих нестандартных библиотек:

java.io.*;

Для работы с файлами и потоками.

java.io.Serializable;

Для сериализации объектов любого типа

java.security.*;

Непосредственно для реализации самой подписи.

Сам же алгоритм цифровой подписи реализовывался поэтапно. Рассмотрим каждый из этапов по отдельности.

1. Генерация ключевой пары

Данный этап происходит на стороне клиента с помощью функции makeCrypto

// листинг public static void makeCrypto()

Для создания новой пары ключей используется объект типа KeyPairGenerator, который представляет собой суперкласс для всех алгоритмов генерации пар ключей. Для создания объекта-генератора пары ключей DSA нужно применить метод getInstance () c параметром DSA.

KeyPairGenerator keygen = KeyPairGenerator.getInstance ("DSA");

Для генерации ключей нужно инициализировать объект-алгоритм, указав мощность (strength) ключа и безопасный генератор случайных чисел. Необходимо отметить, что мощность ключа определяется не длиной сгенерированных ключей, а размером одного из "строительных блоков" ключа. В случае DSA это число битов в модуле - одной из базовых величин, используемых для формирования открытого и закрытого ключей. Предположим, что необходимо генерировать ключи с модулем 512 бит.

keygen.initialize(512, new SecureRandom());

Теперь можно создавать ключи.

KeyPair keys = keygen.generateKeyPair ();

В каждой паре ключей должен быть закрытый и открытый ключ:

открытый ключ (тип PublicKey)

pubkey = keys.getPublic ();

закрытый(секретный) ключ (тип PrivateKey)

privkey = keys.getPrivate ();

Чтобы подписать сообщение создается объект Signature, реализующий алгоритм подписи.

sigalg = Signature.getInstance ("DSA");

2.Вычисление подписи

На текущем этапе необходимо предоставить программе объект-документ, который необходимо подписать.

Для этого в интерфейсе программы добавлена кнопка «Выбрать файл»

При нажатии на которую происходит вызов стандартного диалогового окна Windows для выбора файла:

Процесс реализован с помощью стандартных методов библиотеки java.awt.* и описан в функции chooseFile().

После выбора файла и при нажатии на кнопку «Отправить» вызывается функция sendMess(), в которой и происходит формирование сообщения персылаемого серверу

//листинг public void sendMess()

Вызывается функция для формирования подписи файла

makeSign(fileByte);

Формируется объект-сообщение, пользовательского типа, содержащий имя файла, текст файла в виде байтового массива, открытый ключ и сама подпись в виде байтового массива.

MessageObject mo=new MessageObject(fam.getText(),fileByte,pubkey,makeSign(fileByte));

Методом объекта-потока типа ObjectOutputStream сообщение сериализуется и передается на сервер.

out.writeObject(mo);

Рассмотрим подробнее функцию формирования подписи makeSign.

// листинг public byte[] makeSign(byte[] kod)

Описанный ранее объект Signature может использоваться как для подписи, так и для верификации сообщения. Чтобы подготовить объект к подписанию сообщения, необходимо вызвать метод initSign () и передать ему закрытый ключ

sigalg.initSign (privkey);

Теперь, используя метод update (), нужно передать текст файла в виде байтов объекту Signature

sigalg.update (kod);

И, наконец, используя метод sign (), нужно вычислить подпись. Она представляется в виде байтового массива.

byte [] signature = sigalg.sign ();

return signature;

3.Верификация подписи

Выполнение третьего этапа происходит уже на стороне сервера с помощью функции makeVerify.

Она вызывается в том случае, если при выполнении запроса к базе данных файл с таким же именем был не обнаружен, при этом, если подпись прошла проверку, клиенту посылается сообщение, далее происходит запись информации о файле в базу и в специализированном каталоге создаются текстовые файлы, в которые сериализуются объекты подпись и открытый ключ по отдельности.

В случае же если файл уже был в базе, то функция makeVerify производит проверку подписи с информацией хранящейся в текстовых файлах каталога соответствующих имени присланного файла.

Если файл был не изменен с момента прошлой подписи, то на клиент придет сообщение о достоверности информации,

если же информация не достоверна, то клиент получит сообщение об изменении документа.

Рассмотрим подробнее функцию makeVerify.

// листинг public boolean makeVerify(PublicKey key,byte[] signature,byte[]kod)

Получатель текста (в данном случае сервер) должен получить объект, реализующий алгоритм подписи DSA, и вызвать метод initVerify (), передав ему в качестве параметра открытый ключ.

Signature verifyalg = Signature.getInstance ("DSA");

verifyalg.initVerify (key);

После этого текст в виде байтового массива следует передать объекту Signature.

verifyalg.update (kod);

Теперь подпись можно проверить.

boolean check= verifyalg.verify (signature);

return check;

Если метод verify возвращает значение true, это значит, что данное сообщение было подписано соответствующим ему закрытым ключом. Другими словами, это означает аутентификацию сообщения и его отправителя.

Для того чтобы проверить уже существующий файл на достоверность и целостность понадобилось использовать методы сериализации объектов любого типа, для хранения подписи и открытого ключа в файлах, а так же для восстановления и использования этих объектов в соотвествующих типах. Рассмотрим подробнее метод десериализации объекта открытого ключа takeObject, так как тип PublicKey не относится к объектам стандартного типа.

// листинг public Object takeObject(String name,String fileName)

Создаем поток для чтения объекта из выбранного файла

FileInputStream fas = new FileInputStream("C:\\test\\"+name+"_"+fileName);

Создаем вспомогательный поток для десериализации объекта

ObjectInputStream obStream = new ObjectInputStream(fas);

Считываем информацию в объект стандартного типа Object и закрываем поток.

Object object = obStream.readObject();

obStream.close();

return object;

На сервере вызываем данную функцию и получаем объект типа PublicKey

Object object = takeObject("pubkey",mo.fileName);

if (object instanceof PublicKey)

{dsaPubKey = (PublicKey) object;}

Алгоритм электронной цифровой подписи завершен.

Сравнительный обзор

В ходе выполнения алгоритма ЭЦП мне удалось пронаблюдать и провести краткое сравнение двух языков программирования в рамках реализации цифровой подписи: C# и Java.

Не смотря на распространенность в наше время операционной системы Windows и приложений написанных на основе ее продуктов, разработка ЭЦП на C# имеет ряд, как преимуществ так и недостатков. Впрочем, в силу своей «открытости» для разработчиков язык Java так же нельзя назвать абсолютно удобным средством для реализации того же алгоритма.

При осуществлении электронно-цифровой подписи на Java в первую очередь заметно принципиальное отличие между двумя реализациями подписи:

- C# предполагает шифрование хэша сообщения, что производится методами двух самостоятельных объектов HashAlgorithm shal, DSACryptoServiceProvider Mdsa

// код на C# зашифрованного хэша сообщения(подписи)

byte[] Myhash(string text)

{

byte[] shalHash;

Берем хэш

shalHash = shal.ComputeHash(Encoding.UTF8.GetBytes(text));

Шифруем и отправляем хэш

Mdsa.SignHash(shalHash,"SHA1");

}

- В то время как стандартная реализация подписи на Java во всех источниках происходит при помощи одного объекта sigalg типа Signature и его методов

// код на Java

public byte[] makeSign(byte[] kod)

{

byte [] signature=null;

sigalg.initSign (privkey);

sigalg.update (kod);

signature = sigalg.sign ();

return signature;

}

Далее при верификации подписи

в C# используется метод провайдера типа DSACryptoServiceProvider, получающего открытый ключ,

а в Java снова вступает в работу объект типа Signature.

Очевидно, что создание подписи и верификация одним и тем же объектом, как в Java, гораздо понятнее и легче для восприятия.

Однако, свои недостатки Java продемонстрировал при выборе реализации ЭЦП. Так как Java является широко распространенным языком программирования и совершенно разные разработчики могут вносить свои изменения, создавать новые объекты и методы, достаточно трудно было подобрать единые стандарты разработки и не столкнуться с асимметричностью использования ряда компонентов, например для восстановления открытого ключа из файла без использования сериализации.

Так же процесс сериализации в Java представлен выводом во вспомогательный поток сериализуемого объекта, в то время как в C# это выделено во вполне отдельный доступный метод.

Приятно удивило несомненное преимущество Java при использовании объектов собственного типа. В C# для использования объекта типа MessageObject необходимо было написать отдельную, подключаемую в каждый из проектов dll библиотеку, тогда как в Java потребовалось просто прописать нужный класс в каждом из проектов.

В завершение текущего раздела хотелось бы отметить, что использование того или иного языка программирования конечно дело вкуса и возможностей разработчика. Но, несмотря на невероятно дружелюбную среду разработки Microsoft Visual Studio, качество исполнения и структурированность методов C#, все же отвечая требованиям многоплатформенности и интегрируемости почти во все среды и операционные системы, язык Java представляет собой гораздо более мощный инструмент исполнения потребностей программиста. И изучение его возможностей в криптографии оказалось гораздо более обширной и глубокой темой, чем предполагалось в начале работы.

Заключение

В ходе реализации клиент-серверного приложения с использованием технологии цифровой подписи были решены поставленные задачи, а так же произошло ознакомление с инструментами криптографических библиотек языка Java .

Кроме этого в работе проведен краткий анализ и сравнение возможностей языка C# и Java при реализации алгоритма подписи.

Разработка приложения позволила наглядно продемонстрировать неосуществимость фальсификации ЭЦП и рациональность использования ее в электронном документообороте.

ЭЦП зарекомендовала себя как мощный и доступный в реализации инструмент обеспечения безопасного обмена и ведения электронной документации.

программирование цифровой подпись криптографический

Список используемой литературы

1. Пинягина О.В., Кашина О.А., Андрианова А.А. «Практикум по программированию на языке Java»

2. http://www.java2ee.ru/crypt/crypt03.html.

3. http://docs.oracle.com/javase/1.4.2/docs/api/java

Приложение

/*Проект MyServer*/

/*Листинг файла MyServer.java*/

import java.io.*;

import java.net.*;

import java.sql.* ;

import com.mysql.jdbc.Driver ;

import java.awt.event.*;

import java.awt.*;

import java.security.*;

public class myServer implements Serializable

{

static int port = 8190;

InetAddress serverAddress = null;

private boolean done = false;

private boolean f=false;

Statement s;

ResultSet rs;

Connection con;

String s1;

String zapr;

public static void main(String[] args)

{

// Получает номер порта из строки параметров

// или назначает значение по умолчанию 8190

if (args.length > 0)

port =Integer.parseInt(args[0]);

new myServer (port);

}

myServer (int port) //конструктор

{

try

{

serverAddress = InetAddress.getLocalHost();

}

catch (UnknownHostException e)

{}

// Информация при запуске сервера

System.out.println(serverAddress.getHostName()+" к порту "+port);

try// подключение к БД

{

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

con = DriverManager.getConnection("jdbc:mysql://localhost/SignFilesDb", "root", "");

s = con.createStatement();

rs = null;

}

catch (SQLException ex)

{

System.out.println("SQLException caught");

System.out.println("---");

while ( ex != null )

{

System.out.println("Message : " + ex.getMessage());

System.out.println("SQLState : " + ex.getSQLState());

System.out.println("ErrorCode : " + ex.getErrorCode());

System.out.println("---");

ex = ex.getNextException();

}

}

// Инициализирует ServerSocket

try

{

ServerSocket listener = new ServerSocket(port);

int c = 0;

while (!done)

{

// Создается пауза ожидания клиентских подключений

Socket client = listener.accept( );

c ++;

System.out.println("Начало обслуживания нового клиента под номером "+c);

new handler(client, c).start();

}

listener.close();

}

catch (IOException e)

{

System.out.println("Порт "+port+", возможно, занят. Попробуйте еще раз.");

}

}

class handler extends Thread

{

private Socket toClient;

private int id;

handler(Socket s, int i)

{

// Запоминает номер сокета и клиентский ID

toClient = s;

id = i;

}

public boolean makeVerify(PublicKey key,byte[] signature,byte[]kod)

{

boolean check=false;

try{

Signature verifyalg = Signature.getInstance ("DSA");

verifyalg.initVerify (key);

verifyalg.update (kod);

//Теперь подпись можно проверить

check= verifyalg.verify (signature);

}

catch(Exception nsae)

{

System.out.println(nsae);

}

return check;

}

boolean f;

public void findInDb(String mystr)

{

try

{

zapr="SELECT * FROM sfile WHERE name_sfile='"+mystr+"'";

rs = s.executeQuery(zapr);

f=rs.next();

if(f)

System.out.println("найден");

else

System.out.println("не найден");

}

catch(Exception ex)

{

System.out.println("ошибка");

}

}

public Object takeObject(String name,String fileName)

{

Object object=null;

try

{

FileInputStream fas = new FileInputStream("C:\\test\\"+name+"_"+fileName);

ObjectInputStream obStream = new ObjectInputStream(fas);

object = obStream.readObject();

obStream.close();

}

catch(Exception ee){}

return object;

}

public void run()

{

try

{

ObjectInputStream conin = new ObjectInputStream (toClient.getInputStream());

PrintWriter conout = new PrintWriter(toClient.getOutputStream(),true);

MessageObject mo;

do

{

mo=(MessageObject)conin.readObject();

s1=mo.fileName;

System.out.println("Файл с клиента "+mo.fileName);

findInDb(mo.fileName);

if(f)

{ PublicKey dsaPubKey=null;

byte[]savesign=null;

System.out.println("Файл обнаружен в базе");

Object object = takeObject("pubkey",mo.fileName);

if (object instanceof PublicKey)

{

dsaPubKey = (PublicKey) object;

}

Object object2 = takeObject("sign",mo.fileName);

if (object2 instanceof byte[])

{

savesign = (byte[]) object2;

}

if(makeVerify(dsaPubKey,savesign,mo.fileText))

{System.out.println("Document is Real!"); conout.println("Файл остался без изменений");}

else

{System.out.println("Document is wrong"); conout.println("Файл был изменен");}

conout.println("end of mes");

}

else

{

System.out.println("Файл не обнаружен в базе");

if(makeVerify(mo.pubkey,mo.sign,mo.fileText))

{

System.out.println("подпись"+mo.sign+" прошла проверку");

File file = new File("C:\\test\\pubkey_"+mo.fileName);

FileOutputStream fos = new FileOutputStream(file);

ObjectOutputStream outp=new ObjectOutputStream(fos);

outp.writeObject(mo.pubkey);

outp.close();

File file2 = new File("C:\\test\\sign_"+mo.fileName);

FileOutputStream fos2 = new FileOutputStream(file2);

ObjectOutputStream outp2=new ObjectOutputStream(fos2);

outp2.writeObject(mo.sign);

outp2.close();

zapr="INSERT INTO sfile(name_sfile,sign_sfile,pubkey_sfile) VALUES('"+mo.fileName+"','sign_"+mo.fileName+"','pubkey_"+mo.fileName+"');";

s.executeUpdate(zapr);

conout.println("Файл успешно подписан и сохранен! Спасибо!");

conout.println("end of mes");

}

else

{

System.out.println("Подпись не прошла проверку");

}

}

}

while (!mo.fileName.equals("end of work"));

conout.println("___________________________________________");

conout.println("Спасибо за использование продукта! Работа завершена.");

conout.println("end of mes");

System.out.println("Клиент отключился");

}

catch (Exception myex)

{

System.out.println(myex);}

}

}

}

/*Листинг файла MessageObject.java*/

import java.io.*;

import java.security.*;

import java.io.Serializable;

class MessageObject implements Serializable

{

public String fileName; // имя файла

public byte[] fileText; // текст файла

public PublicKey pubkey;// ключ

public byte[] sign; //подпись

MessageObject()

{

fileName="end of work";

}

MessageObject(String fn,byte[] ft,PublicKey pk,byte[] s)

{

fileName=fn;

fileText=ft;

pubkey=pk;

sign=s;

}

}

/*Проект myClient*/

/*Листинг файла myClient.java*/

import java.awt.event.*;

import java.awt.*;

import java.sql.* ;

import com.mysql.jdbc.Driver ;

import java.io.*;

import java.net.*;

import java.security.*;

public class myClient extends Frame implements ActionListener

{

Label l=new Label("");

Button MyButton = new Button("Отправить");

Button MyButton2 = new Button("Выбрать файл");

Label f = new Label("Имя файла:");

TextField fam=new TextField("", 20);

TextArea ta=new TextArea("",100,100);

Socket mySock;

BufferedReader in;

ObjectOutputStream out;

String str="";

static PrivateKey privkey;

static PublicKey pubkey;

static Signature sigalg;

public static void main(String[] args)

{

try

{

makeCrypto();

myClient wapp= new myClient();

}

catch (Exception ex)

{ System.out.println("Other Error in Main."); }

}

myClient()

{

setLayout(new BorderLayout (10,10));

Panel p1=new Panel(); // панель для элементов управления

add("North",p1);

MyButton.addActionListener(this);

MyButton2.addActionListener(this);

p1.add(f);

p1.add(fam);

p1.add(MyButton);

p1.add(MyButton2);

add("Center",ta);

addWindowListener(new WindowAdapter(){// для обработки событий окна

public void windowClosing(WindowEvent e)

{try{

sendMessEnd();

dispose();

System.exit(0);

}

catch(Exception ioex)

{

System.out.println("Ошибка!");

}

}

});

setSize(600,400);

setLocation(200,200);

show();

try{

mySock = new Socket("localhost",8190); //создание клиентского сокета

in = new BufferedReader(new InputStreamReader(mySock.getInputStream()));//создание входного потока для сокета

out = new ObjectOutputStream(mySock.getOutputStream());// создание выходного потока для сокета

}

catch(Exception ex)

{

}

}

public FileInputStream fileIn;

public File file;

public FileDialog fd;

byte[] fileByte;

public void chooseFile()

{

try{

fd=new FileDialog(myClient.this);

fd.setMode(FileDialog.LOAD);

fd.setVisible(true);

file=new File( fd.getDirectory() + File.separator + fd.getFile());

int size=(int)file.length();

System.out.println(size);

fileIn=new FileInputStream(file);

fileByte=new byte[size];

fileIn.read(fileByte);

fileIn.close();

fam.setText(file.getName());

}

catch(Exception e)

{

}

}

public void sendMess()

{

try{

makeSign(fileByte);

MessageObject mo=new MessageObject(fam.getText(),fileByte,pubkey,makeSign(fileByte));

out.writeObject(mo);

}

catch(Exception ee)

{

}

}

public void sendMessEnd()

{

try{

MessageObject mo=new MessageObject();

out.writeObject(mo);

}

catch(Exception e)

{

}

}

public static void makeCrypto()

{

try{

KeyPairGenerator keygen = KeyPairGenerator.getInstance ("DSA");

keygen.initialize(512, new SecureRandom());//Для генерации ключей нужно инициализировать объект-алгоритм,

//указав мощность (strength) ключа и безопасный генератор случайных чисел

KeyPair keys = keygen.generateKeyPair ();

pubkey = keys.getPublic ();

privkey = keys.getPrivate ();

//Чтобы подписать сообщение создается объект Signature, реализующий алгоритм подписи.

sigalg = Signature.getInstance ("DSA");

}

catch(Exception ex)

{

}

}

public byte[] makeDigest(String kod)

{

byte [] hash=null;

try{

MessageDigest alg = MessageDigest.getInstance ("SHA-1");

alg.update(kod.getBytes());

hash = alg.digest();

System.out.println(hash);

}

catch(Exception ex){

}

return hash;

}

public byte[] makeSign(byte[] kod)

{

byte [] signature=null;

try

{

sigalg.initSign (privkey);

sigalg.update (kod);

signature = sigalg.sign ();

System.out.println(new String(signature));

}

catch(Exception ex)

{

}

return signature;

}

public void actionPerformed(ActionEvent e)

{

try

{

if (e.getSource()==MyButton)

{

if(!fam.getText().equals(""))

{

sendMess();

do

{

str=in.readLine();

ta.setText(ta.getText()+"\n"+str);

}

while(!str.equals("end of mes"));

}

else

{

fam.setText("Выберите файл");

}

}

if(e.getSource()==MyButton2)

{

chooseFile();

}

}

catch(IOException ioex)

{

System.out.println("Ошибка IO");

}

}

}

/*Листинг файла MessageObject.java*/

См. проект myServer.

Размещено на Allbest.ru


Подобные документы

  • Организационно-правовое обеспечение электронной цифровой подписи. Закон "Об электронной цифровой подписи". Функционирование ЭЦП: открытый и закрытый ключи, формирование подписи и отправка сообщения. Проверка (верификация) и сфера применения ЭЦП.

    курсовая работа [22,9 K], добавлен 14.12.2011

  • Основные алгоритмы реализации электронной цифровой подписи. Понятие секретного и открытого ключа. Программные модули, сроки действия и порядок функционирования электронной подписи. Технология работы с информационной системой "ЭЦП", перспективы развития.

    курсовая работа [1,1 M], добавлен 07.12.2010

  • Разъяснения по использованию систем цифровой подписи в связи с ведением закона "Об электронной цифровой подписи". Пример практического применения механизма электронно-цифровой подписи: программа контроля подлинности документов, хранимых в базе данных.

    контрольная работа [180,1 K], добавлен 29.11.2009

  • Общая схема цифровой подписи. Особенности криптографической системы с открытым ключом, этапы шифровки. Основные функции электронной цифровой подписи, ее преимущества и недостатки. Управление ключами от ЭЦП. Использование ЭЦП в России и других странах.

    курсовая работа [288,2 K], добавлен 27.02.2011

  • Общая характеристика электронной подписи, ее признаки и составляющие, основные принципы и преимущества применения. Использование электронной цифровой подписи в России и за рубежом. Правовое признание ее действительности. Сертификат ключа проверки ЭЦП.

    курсовая работа [27,2 K], добавлен 11.12.2014

  • Алгоритм функции формирования и проверки подписи. Интерфейс как аппаратная или программная система сопряжения объектов с различными характеристиками. Разработка программы, которая реализует процедуру подписи сообщения и процедуру проверки подписи.

    курсовая работа [150,0 K], добавлен 13.11.2009

  • Правовое регулирование отношений в области использования электронной цифровой подписи. Понятие и сущность электронной цифровой подписи как электронного аналога собственноручной подписи, условия ее использования. Признаки и функции электронного документа.

    контрольная работа [34,5 K], добавлен 30.09.2013

  • Основные проблемы технологии управления документооборотом и ведение регистрационно-контрольных форм. Автоматизация делопроизводства компании путем внедрения информационной системы документационного обеспечения. Использование электронной цифровой подписи.

    курсовая работа [492,6 K], добавлен 20.10.2010

  • Изучение истории развития электронной цифровой подписи. Исследование её назначения, принципов работы, основных функций. Виды электронных подписей в Российской Федерации. Асимметричные алгоритмы подписей. Использование хеш-функций. Управление ключами.

    реферат [33,5 K], добавлен 04.06.2014

  • Анализ характеристик средств криптографической защиты информации для создания электронной цифровой подписи. Этапы генерации ключевого контейнера и запроса при помощи Удостоверяющего центра с целью получения сертификата проверки подлинности клиента.

    реферат [604,6 K], добавлен 14.02.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.