Асимметричными ключами шифрования с keypairgene

Открытый ключ шифрования позволяет обеспечить открытый ключ, который может быть использован как расшифровать сообщения, которые вы зашифрованы и шифрования сообщений, что только можно расшифровать. Доктор Рональд Л. Ривест, Доктор Ади Шамира и Леонарда М. ключами являются R, S, и в коде шифрования RSA. Все трое были АСМ 2002 Премия Тьюринга победителей за их работу в криптографии с открытым ключом. В ACM Тьюринга страница Победители премии, вы можете найти презентации от 7 июня 2003 ими на "Ранние Дни ЮАР", на "Криптология: доклад о положении дел", а на "pre-RSA".

Алгоритм шифрования RSA начинается со случайными и независимыми Выбор из двух больших простых чисел P и Q, например, р \u003d 11 и Q \u003d 31. Следующий шаг заключается в расчете N \u003d (P) (Q). Для р \u003d 11 и Q \u003d 31, N \u003d (11) (31) \u003d 341. Следующий целыми E выбрана между 3 и Н-1 (включительно), которая не имеет факторы общего с (С-1) (Q-1). В этом случае (11-1) (31-1) 300. Номер 300 может стать премьер учитываться как (2) (2) (3) (5) (5). Таким е не должно быть кратно 2, 3 или 5. Алгоритм не требует, чтобы выбрать простое число. Например, 49 или 77 будет делать. Для сохранения числа малых и простая, давайте выбирать E \u003d 7.

Затем алгоритм требует целого D такая, что (D) (E) \u003d 1 (MOD (С-1) (Q-1)). Эквивалентно Программист Java's Of моделирование является остатком оператора. В этом примере, E \u003d 7 и (P -1) (Q-1) \u003d 300, поэтому число D требует, чтобы 7d% 300 \u003d 1. Один из способов найти этот номер, чтобы посмотреть на одну больше, чем кратные 300, посмотрите на первый, который делится на 7. Другими словами, вы должны проверить 301, 601, 901, и так далее. Число 301 делится на 7 (43 раз 7 301), так что D \u003d 43.

Две пары чисел имеют важное значение. Число N \u003d (P) (Q), известная как модуль RSA, является одним из компонентов обеих пар. Первый пары (N, D), которая известна как RSA ключа. Второй пары (N, E), который известен как открытый ключ RSA. Номер D является RSA частного показателя (D \u003d 43). Число е RSA общественности показателя (E \u003d 7). Вы публиковать или иным образом делать известным публичным ключом. Вы держите закрытым ключом (в частности, D), а также оригинальные простых чисел (P и Q) в секрете.

Так где же на языке программирования Java пришел в фотографию RSA? Она поставляется в java.security через пакет. Используя этот пакет, вы можете сгенерировать пару ключей для алгоритма RSA. Для этого нужно сначала создавать экземпляр KeyPairGenerator для алгоритма RSA, инициализация его с желаемого размера ключа в число битов. Тогда вы называете generateKeyPair () метод для генерации пары ключей RSA.


   KeyPairGenerator generator =

                   KeyPairGenerator.getInstance("RSA");

   generator.initialize(1024);

   KeyPair keyPair = generator.generateKeyPair();

Алгоритм прошла на заводе GetInstance () метода в виде строки. Если алгоритм не поддерживается установленная поставщиком (ы), генерируется NoSuchAlgorithmException.

Каждый провайдер должен предоставить (и документов) инициализации по умолчанию. Если владелец по умолчанию отвечает вашим требованиям, вы не обязаны сохранить промежуточный объект KeyPairGenerator. Вы можете просто генерировать пары ключей с помощью одной строки кода. Однако, если вам нужно сгенерировать более чем одной парой ключей, можно повторно использовать объект KeyPairGenerator. Это дает намного лучшую производительность, чем при использовании новых объектов KeyPairGenerator каждый раз.


   import java.security.KeyPairGenerator;

   import java.security.NoSuchAlgorithmException;

   import java.security.KeyPair;



   public class AsymmetricKeyMaker {



      public static void main(String[] args) {

        String algorithm = "";

        if (args.length == 1algorithm = args[0];



        try {

          KeyPair keyPair = KeyPairGenerator

                               .getInstance(algorithm)

                               .generateKeyPair();



          System.out.println(keyPair.getPublic());

          System.out.println(keyPair.getPrivate());



        catch (NoSuchAlgorithmException e) {

          System.err.println(

            "usage: java AsymmetricKeyMaker <RSA | DSA>");

        }



      }

   }

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

java AsymmetricKeyMaker RSA

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

SunJSSE RSA public key:
public exponent:
010001
modulus:
b24a9b5b ba01c0cd 65096370 0b5a1b92 08f8555e
7c1b5017 ec444c58 422b4109
59f2e15d 43714d92 031db66c 7f5d48cd 17ecd74c
39b17be2 bf9677be d0a0f02d
6b24aa14 ba827910 9b166847 8154a2fa 919e0a2a
53a6e79e 7d2933d8 05fc023f
bdc76eed aa306c5f 52ed3565 4b0ec8a7 12105637
af11fa21 0e99fffa 8c658e6d
SunJSSE RSA private CRT key:
private exponent:
78417240 9059965d f3843d99 d94e51c2 52628dd2
490b731e 6fb2317c 66451e7c
dc3ac25f 519a1ea4 198df4f9 817ebe17 f7c73c00
a1f96082 348f9cfd 0b63421b
7f45f131 c363475c c1b25f57 ee029f5e 0848ba74
ba81b730 ac4c0135 ce46478c
e462361a 650e3356 f9b7a0c4 b682557d 3655c052
5e3554bd 970100bf 10dc1b51
modulus:
b24a9b5b ba01c0cd 65096370 0b5a1b92 08f8555e
7c1b5017 ec444c58 422b4109
59f2e15d 43714d92 031db66c 7f5d48cd 17ecd74c
39b17be2 bf9677be d0a0f02d
6b24aa14 ba827910 9b166847 8154a2fa 919e0a2a
53a6e79e 7d2933d8 05fc023f
bdc76eed aa306c5f 52ed3565 4b0ec8a7 12105637
af11fa21 0e99fffa 8c658e6d
public exponent:
010001
prime p:
e768033e 21646824 7bd031a0 a2d9876d 79818f8f
2d7a952e 559fd786 2993bd04
7e4fdb56 f175d04b 003ae026 f6ab9e0b 2af4a8d7
ffbe01eb 9b81c75f 0273e12b
prime q:
c53d78ab e6ab3e29 fd98d0a4 3e58ee48 45a366ac
e94dbd60 ea24ffed 0c67c5fd
3628ea74 88d1d1ad 58d7f067 20c1e3b3 db52adf3
c421d88c 4c4127db d03592c7
prime exponent p:
e09942b4 76029755 f9da3ba0 d70edcf4 337fbdcf
d0eb6e89 f74f5a07 7ca94947
6835a805 3dfd047b 17310dc8 a39834a0 504400f1
0ce6e5c4 413df83d 4e0b1cdb
prime exponent q:
829b8afd a1984168 c2d1df4e f32e2653 5b31b17a
cc5ebb09 a2e26f4a 040def90
15be104a ac92ebda 72db4308 b72b4ce1 bb58cb71
80adbcdc 625e3ecb 92daf6df
crt coefficient:
4d8190c5 7730b729 00a8f1b4 ae526300 b22d3e7d
d64df98a c1b19889 5240141b
0e618ff4 be597979 95195c51 0866c142 30b37a86
9f3ef519 a3ae6469 14075097

Если вы новичок в программирования Java, этот вывод свидетельствует о значении правильной перегрузки ToString () метода. Текст, который начинается "SunJSSE открытым ключом RSA:" является результатом вызова ToString () в классе RSAPublicKey. Оно содержит значение показателя общественности о которой говорилось, как электронная и модуль Н. текстом, который начинается "SunJSSE частного ключа RSA:" является результатом вызова того же метода в классе RSAPrivateKey. Он содержит частный показатель D и модулем Н. Она также содержит публичную электронную экспоненты и генерации простых чисел, а также некоторые другие данные. Если вы шифрования данных, вы должны быть осторожны, как вы отправите общественного значения ключа. Однако, если значения используются для аутентификации передачу, вы должны сделать их общедоступными, чтобы другие могли убедиться, что файл, например, возникла с вами, и был доставлен без изменений.

При последующих запусках кода и передавать в строке суточные, вы найдете значения P, Q, G и как государственного, так и закрытых ключей. Соотношение цена / у предоставляется в открытом ключе и х в закрытый ключ. Алгоритмы разные, и поэтому информация, которая должна быть рассчитана и общие отличаются.

Так как же использовать эту пару ключей для шифрования? В случае RSA, вам начать с какой-нибудь текст, который вы хотите зашифровать, и превратить его в число т, что меньше, чем модуль. Вы узнаете больше об этом позже. Тем не менее, легко видеть важность выбора больших простых чисел. Это потому, что произведения простых чисел определяет размер, что может быть зашифрована. Например, предположим, что M \u003d 2. Тогда вы шифрования путем вычисления C \u003d M ^ E (MOD N). Другими словами, Вы поднимаете число, которое вы шифрования в силу вашей общественной показателя и принимать остаток от деления на модуль. В этом примере, 2 ^ 43 на 8 больше, чем несколько из 341, так что вам отправить зашифрованное сообщение C \u003d 8.

Расшифровка требует, чтобы вы повторите этот процесс с помощью частного ключа. Возьмите C ^ D (MOD N). В этом примере расчета 8 ^ 7. Затем возьмите свой остаток от деления на 341. Вы получите обратно исходное сообщение 2. Это, конечно, не случайно и всегда будет. Результат следует из заявления малой теоремы Ферма в результате чего M ^ (ED) \u003d M (MOD N). Для безопасности, каждый участник шифрование с открытым ключом другой стороны.

Вы можете найти более подробную информацию об алгоритме RSA здесь. Вы можете найти более подробную информацию об алгоритме DSA здесь.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>