Шифрование SSL, SHA-1 и SHA-2 - PullRequest
8 голосов
/ 13 мая 2010

Я пытаюсь реализовать шифрование SHA-2 вместо SHA-1 .

Для этого я знаю, что число битов между этими двумя алгоритмами хеширования различно, и это меня смущает.

Как этого достичь и в каких частях мне необходимо внести необходимые изменения?

Я могу использовать любую библиотеку с открытым исходным кодом из Java, Python и любого другого основного языка программирования.

Ответы [ 5 ]

31 голосов
/ 13 мая 2010

Прежде всего, ни SHA-1, ни что-либо, связанное с SHA-2, не являются алгоритмом «шифрования». Это хеш-функции. В SSL хэш-функции используются главным образом для обеспечения целостности, а не конфиденциальности, посредством конструкции HMAC . Хеш-функция принимает входные данные произвольной длины и создает выходные данные с фиксированной длиной, что является своего рода «дайджестом» входных данных; операция не должна быть обратимой.

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

HMAC - это конструкция, которая превращает хеш-функцию (например, SHA-1) в MAC. TLS (это текущее стандартное имя SSL) использует HMAC. Выход HMAC, когда используется с данной хеш-функцией h , имеет тот же размер, что и выход h . Этот вывод может быть условно усечен: HMAC / SHA-1 номинально выдает 160-битный выход, но в некоторых протоколах принято хранить только первые 96 бит. Такое усечение не происходит в SSL.

Стандарт FIPS 180-3 определяет пять хеш-функций, названных SHA-1, SHA-224, SHA-256, SHA-384 и SHA-512, с длинами вывода 160, 224, 256 384 и 512 бит соответственно. Функции SHA-224, SHA-256, SHA-384 и SHA-512 в разговорной речи известны как «SHA-2», поэтому «SHA-2» - это не одна функция, а семейство из четырех хеш-функций.

Спецификация TLS определяет наборов шифров . Набор шифров - это набор криптографических алгоритмов, которые клиент и сервер согласовывают на начальном этапе соединения («рукопожатие»). Среди алгоритмов есть MAC для использования для обеспечения целостности данных. Некоторые из стандартных наборов шифров указывают, что MAC должен быть «HMAC с SHA-256», то есть чем-то, что использует одну из функций SHA-2.

Итак, ответ на ваш вопрос таков: «просто настройте клиент и сервер для использования одного из наборов шифров с HMAC / SHA-256». Если ваша реализация SSL не поддерживает такие комплекты шифров, вам придется изменить ее, что повлечет за собой достаточно глубокое понимание того, как работает SSL; необходимо прочитать и понять полный RFC 5246.

1 голос
/ 08 сентября 2013

Я уверен, что вы увидите все больше и больше этого вопроса. GoDaddy теперь имеет возможность при отправке запроса подписи сертификата, чтобы указать, собираетесь ли вы использовать SHA1 или SHA2.

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

1 голос
/ 13 мая 2010

Насколько я понимаю, все, что вам нужно знать для реализации SHA256 в SSL, покрыто RFC 5246 .

Но я подозреваю, что вы далеко не понимаете достаточно криптографии для этого ... SHA 2 не существует, вы ищете SHA256, SHA384 или SHA512, и это не алгоритм шифрования, а криптографический хэш-функция.

Итак, что вы на самом деле пытаетесь сделать?

1 голос
/ 13 мая 2010

Модуль hashlib и MessageDigest поддерживают все алгоритмы SHA-2.

0 голосов
/ 06 февраля 2015

попробуйте, это работает для weblogic SQL Authenticator

 public static void main(String args[]) throws NoSuchAlgorithmException {
 String password="abcdef"; 
 System.out.println("{SHA-1}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes())));
 }
...