Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

Статьи - разминка для умаШифрование с помощью открытого ключа

Шифрование с помощью открытого ключа

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

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

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

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

Решение проблемы состоит в том, чтобы открытые ключи рассылались в сообщениях, подписанными кем-то, кому доверяет и отправитель и получатель. Подобное сообщение получило название цифровой сертификат. Текущий стандарт, определяющий правила работы с сертификатами имеет номер X.509 версия 3, поэтому подобные сертификаты часто называют сертификатами X.509v3. Того, кому доверяет и отправитель и получатель, принято называть службой сертификации (Certification Authority - CA). Если отправитель и получатель работают в одной компании или получатель доверяет компании отправителя, ему может быть предоставлен сертификат, подписанный службой сертификации данной компании. Если отправитель и получатель не поддерживают никаких отношений, получателю должен быть предоставлен сертификат, подписанный общественной службой сертификации, например компанией Verisign (http://www.verisign.com). Если получатель и отправитель находятся в достаточно близких отношениях, то получателя вполне может удовлетворить сертификат, подписанный отправителем, т.е. выданный ему им же самим.

Рассматриваемая система имеет ещё одно слабое звено. С точки зрения объёма вычислений, чрезвычайно неэффективно расшифровывать с помощью открытого ключа весь достаточно большой файл, подобный JAR-архиву. На самом деле системы с использованием открытых ключей шифрования не предполагают подобных действий. Вместо этого применяется эффективный алгоритм, называемый алгоритмом создания дайджеста сообщения, позволяющий получить длинное число, которое будет практически уникальным для данного сообщения.

Одним из наиболее распространённых алгоритмов создания дайджеста сообщения является алгоритм SHA1. А наиболее распространённый алгоритм расшифровки с помощью открытых ключей - DSA.


Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


Опрос
Считаете ли вы целесообразным сделать аналог упражнений по Hibernate на базе вопросов www.sql-ex.ru?
Да, полный аналог упражнений
Да, но с реализацией основных конструкций объектной модели
Нет, Hibernate не актуален, использую др. технологии
Нет



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95