Клиент-серверное приложение с использованием технологии цифровой подписи на языке программирования 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