2010-05-13 6 views
8

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

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

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

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

+0

Какой алгоритм SHA-2 Вас интересуют? –

+0

Это на самом деле не имеет значения, если это алгоритм SHA-2 :) С уважением – Hellnar

+0

Что это связано с SSL? –

ответ

30

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

Хэш-функция является «общедоступной»: нет конфиденциальных данных, нет ключа; каждый может вычислить выход хэш-функции на любом заданном входе. «Код аутентификации сообщения» (MAC-код) является своего рода «keyed hash»: в этот процесс также вводится секретный ключ (то есть произвольная группа бит), так что знание ключа необходимо для (пересчета) вывод 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 будет необходимо.

+3

Я просто немного подумал о RFC 5246. Я не думаю, что это простая и интересная ночь чтения? –

1

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

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

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

1

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

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

0

попробовать это, он работает для 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()))); 
}