Статьи

Java довольно хорошая конфиденциальность (PGP)

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

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

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

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

Подводя итог, открытый ключ публикуется и становится доступным. Он позволяет любому зашифровать данные с помощью открытого ключа, но только сторона, обладающая закрытым ключом, может расшифровать данные. Большим преимуществом криптографии с открытым ключом является то, что она позволяет сторонам, у которых нет ранее существовавшего механизма безопасности, обмениваться сообщениями безопасным образом, поскольку все коммуникации включают только открытые ключи, и никакой закрытый ключ никогда не передается или не передается. Некоторыми распространенными примерами систем с открытым ключом являются RSA (Rivest, Shamir и Adleman) и DSA (алгоритм цифровой подписи).

PGP

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

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

Расшифровка работает в обратном порядке. Копия PGP получателя использует закрытый ключ пользователя для восстановления ключа сеанса, сгенерированного выше, для расшифровки зашифрованного текста.

В дополнение к шифрованию PGP использует криптографически надежную хеш-функцию для подписи сообщений, если необходимо обеспечить некоторую форму проверки. Хеш-функция — это процесс, который принимает ввод переменной длины (сообщение) и производит вывод фиксированной длины; скажем, 160 бит. Это называется дайджестом сообщения, которое может отличаться при малейшем изменении на входе. Затем PGP использует дайджест и закрытый ключ для создания «подписи». Кроме того, эта подпись и простой текст передаются получателю, который должен будет повторно вычислить дайджест и проверить подпись. Опять же, малейшее изменение этого сообщения изменит подписанный документ и приведет к сбою процесса проверки.

В Java, пожалуй, самым популярным поставщиком библиотек шифрования является «Легион Надувного замка» .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// insert code here
public class PGPExample {
    public static void encrypt()  {
 
         Security.addProvider(new BouncyCastleProvider());
          
         //Load Public Key File
         FileInputStream key = new FileInputStream("res/keys/public.bpg");
         PGPPublicKey pubKey = KeyBasedFileProcessorUtil.readPublicKey(key);
          
         //Output file
         FileOutputStream out = new FileOutputStream("target/enc.bpg");
 
         //Input file
         String inputFilename = "src/main/resources/plaintext.txt";
 
        //Other settings
        boolean armor = false;
        boolean integrityCheck = false;
        KeyBasedFileProcessorUtil.encryptFile(out, inputFilename,
           pubKey, armor, integrityCheck);  
    }
}

Ресурсы

  1. http://www.pgpi.org/doc/pgpintro/
  2. http://en.wikipedia.org/wiki/Pretty_Good_Privacy
  3. http://www.rossde.com/PGP/index.html#links
  4. http://www.openpgp.org/
  5. http://www.bouncycastle.org/java.html

Ссылка: Java и довольно хорошая конфиденциальность (PGP) от нашего партнера JCG на Reflective Thought.net .

Статьи по Теме :