Я пытаюсь реализовать шифрование SHA-2 вместо SHA-1.
Для этого я знаю, что число битов между этими двумя хеш-алгоритмами отличается, и оно смущает меня.
Как это может быть достигнуто и в том, какие части я должен внести требуемыми изменениями?
Я могу пользоваться любой библиотекой с открытым исходным кодом от Java, Python и любого другого главного языка программирования.
Прежде всего, ни 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.
Модуль hashlib
и MessageDigest
поддерживают все алгоритмы SHA-2.
Насколько я могу судить, все, что вам нужно знать для внедрения SHA256 в SSL, описано в RFC 5246.
Но я подозреваю, что вы и близко не понимаете достаточно криптографии, чтобы сделать это... SHA 2 не существует, вам нужен SHA256, SHA384 или SHA512, и это не алгоритм шифрования, а криптографическая хэш-функция.
Итак, что вы на самом деле пытаетесь сделать?