SSL-шифрование, SHA-1 и SHA-2

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

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

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

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


person Hellnar    schedule 13.05.2010    source источник
comment
Какой алгоритм SHA-2 вас интересует?   -  person Ignacio Vazquez-Abrams    schedule 13.05.2010
comment
На самом деле это не имеет значения, если это алгоритм SHA-2 :) С уважением   -  person Hellnar    schedule 13.05.2010
comment
При чем здесь SSL?   -  person President James K. Polk    schedule 14.05.2010


Ответы (5)


Прежде всего, ни 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.

person Thomas Pornin    schedule 13.05.2010
comment
Я просто немного заболел, думая о RFC 5246. Я не думаю, что это легкий и интересный вечер чтения? - person Mark Essel; 18.03.2011

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

person Ignacio Vazquez-Abrams    schedule 13.05.2010


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

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

person wired420    schedule 08.09.2013

попробуйте это, он работает для веб-логического 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())));
 }
person TariqueH    schedule 06.02.2015