Шифрование с использованием SHA1

Я разрабатываю большое приложение, и мне нужно шифрование, когда данные передаются между двумя машинами на разных континентах. Я никогда не работал с шифрованием. Мне нужно простое шифрование, которое можно обрабатывать в PHP / Ruby / Python без каких-либо зависимостей.

Поэтому я решил использовать HMAC SHA1.

$pad=hash_hmac("sha1","The quick brown....","mykey");

Это то, что я узнал после некоторого исследования в Интернете.

Насколько сложно его расшифровать, если кто-то не знает ключа? Кроме того, есть ли альтернативы этому?

ОБНОВЛЕНИЕ - спасибо за все ответы. Проблема решена.


person Aditya Singh    schedule 19.01.2012    source источник
comment
Это хеш, а не шифр: его нельзя расшифровать, не перебрав все возможности и не проверив их!   -  person Xophmeister    schedule 19.01.2012


Ответы (5)


Расшифровать его невозможно, даже зная ключ. HMAC SHA1 - это алгоритм хеширования с ключом, а не шифрование.

Хеш - это криптографическая односторонняя функция, которая всегда генерирует значение одинаковой длины (я думаю, что SHA1 имеет 128 бит) независимо от длины ввода. Суть хеширования в том, что с учетом выходного значения невозможно с вычислительной точки зрения найти входное значение для получения этого выхода. Ключевой хэш используется для предотвращения атак на радужную таблицу. Даже если вы знаете ключ, вы не можете отменить процесс хеширования.

Для шифрования вы хотите посмотреть AES.

person Andrew Cooper    schedule 19.01.2012
comment
SHA1 имеет длину 160 бит (независимо от размера ввода) - person poupou; 19.01.2012
comment
Спасибо, poupou. Я знал, что мне нужно было это посмотреть. - person Andrew Cooper; 19.01.2012

SHA1 - это односторонняя хеш-функция, по определению она никем не расшифровывается. Возникает вопрос, есть ли у вас открытый текст T, который хеширует в H. Насколько сложно найти другой T, который также хеширует в H.

Согласно Википедии, для SHA1 самая известная атака методом перебора потребует 2 ^ 51 раз, чтобы найти подходящий простой текст.

Если вам нужно реальное шифрование, позволяющее обратить процесс вспять, вам следует взглянуть на AES256.

См .: http://en.wikipedia.org/wiki/Cryptographic_hash_function

Для общего обсуждения этого.

person Stephen    schedule 19.01.2012

Как сказал Эндрю, SHA1 является хеш-алгоритмом и не может использоваться для шифрования (поскольку вы не можете вернуть исходное значение). Созданный им дайджест может использоваться для проверки целостности данных.

HMAC - это конструкция над алгоритмом хеширования, которая принимает ключ. Однако он не предназначен для шифрования (опять же, его нельзя расшифровать), но он позволяет вам подписывать данные, то есть с тем же ключом вы сможете гарантировать, что данные не были подделаны. во время его передачи.

Для шифрования вам следует использовать AES или, если применимо к вашему приложению, HTTPS (который решит больше проблем, чем вы хотите знать ;-)

person poupou    schedule 19.01.2012

SHA-1, MD-5 - это односторонние алгоритмы хеширования. Они просто генерируют длинную строку. Каждая строка, подвергнутая этим функциям, даст вам длинную строку, которую невозможно сохранить.

Они далеки от шифрования.

Если вам нужны алгоритмы шифрования, выберите алгоритмы AES (Advanced Encryption Standard), DES (Data Encryption Standard).

person Shankar Narayana Damodaran    schedule 19.01.2012

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

person Xophmeister    schedule 19.01.2012
comment
-1 за предложение шифрования XOR по общему секретному вопросу (извините) - person Maarten Bodewes; 19.01.2012
comment
Почему? Я знаю, что это не совсем лучший вариант, но, учитывая, что OP пытался использовать хэш SHA1 для шифрования данных, я решил, что простой для понимания и реализации алгоритм будет хорошим местом для начала обучения. - person Xophmeister; 19.01.2012
comment
@owlstead - XOR подходит, если предполагается хороший высококачественный поток неповторяющегося ключевого материала. По сути, так работает RC4. Основная проблема - получить поток ключевых данных с достаточно высокой энтропией, чтобы быть полезными, и возможность использовать один и тот же материал в другом. Тем не менее, я дал этому ответу -1 за предложение OP реализовать свой собственный алгоритм шифрования. Шифрование, как известно, сложно сделать правильно, и даже при использовании известного алгоритма детали реализации могут привести к недостаткам. Намного лучше использовать существующую зрелую библиотеку. - person Andrew Cooper; 20.01.2012
comment
@Xophmeister, если бы это был обучающий вопрос, я бы согласился, что какое-то шифрование XOR может быть хорошим способом начать обучение. Но это никогда не было вопросом ОП. - person Maarten Bodewes; 20.01.2012
comment
@AndrewCooper XOR подходит в качестве последней части модели шифрования, когда известный хороший алгоритм создает поток ключей. И если бы Xophmeister предложил бы, скажем, AES в режиме CTR с хорошо выбранным NONCE, я бы не стал жаловаться. Но предлагая шифрование XOR или одноразовый блокнот для реальной проблемы шифрования ... Нет. - person Maarten Bodewes; 20.01.2012