2009-10-30 3 views
1

Как проверить правильный ключ используется для дешифрования зашифрованных данных AES с использованием pyCrypto AES?Проверьте ключ правильно, используя pyCrypto AES decryption

cipher = AES.new(key, AES.MODE_CFB) 
cipher.decrypt(s) 

Если используется неверный ключ, он все еще пытается расшифровать данные, запутывания его больше. Есть ли какой-либо тест, который я могу сделать, чтобы доказать, что данные дешифруются в исходное состояние?

ответ

2

Я не верю, что можно [сказать, если ключ является правильным], с только контексте AES.
т. Е. Вы не можете, кроме как путем проверки формата и/или некоторого значения дайджест-сообщения для чистого текста после его декодирования, что подразумевает, что вы знаете такую ​​структуру или дайджест сообщения.

Хотя это просто следствие того, как устанавливается алгоритм/протокол, одним из преимуществ этого является то, что это делает атаки с использованием грубой силы на таких шифрах более сложными, потому что нужно взять время и декодировать не менее часть сообщения, а также передать его через ясный текстовый детектор. Четко-текстовый детектор представляет собой некоторую логику, которая имеет априорное/угаданное понимание природы открытого текста и которое может определить, соответствуют ли данные ожидаемому; например, простой детектор может проверить, что первые 20 байтов - US ASCII). Это особенно полезно при использовании нескольких схем кодирования, таких как тройной DES, где нет понятия (у гениев криптоанализа может быть мягкая идея ...) того, как выглядят промежуточные «четкие тексты».

Редактировать: ответить на вопросы Op в тех
Да, если вы не уверены в том ключе, вы должны сделать копию шифротекста, прежде чем пытаться получить его декодируется нот. Он будет возвращаться как реальная тарабарщина (и не легко обратимая, если вообще), если она декодируется с неправильным ключом.
Чтобы ввести способ определения достоверности декодированного сообщения, как для бинарных и ASCII/текстовых сообщений, вы можете использовать вариацию на следующей концепции «envellope».
Примечание: Это может [мягко] ослабить силу вашей криптографической установки.
Предполагается, что у вас есть контроль или совместная работа над процессом кодирования. Это работает как для ASCII, так и для двоичного содержимого.
Идея состоит в том, чтобы добавить в сообщение префикс («заголовок») и, возможно, суффикс («трейлер»). Чтобы быть криптографически более безопасным, такой префикс должен быть достаточно длинным (скажем, 500 байт?), И большая часть его контента носит случайный характер. Затем вам нужно будет вставить фактическое сообщение в этот «конверт» и подтвердить правильность/целостность конверта после decription. Ориентировочный пример:

 
17 random bytes 
2 bytes length of this header (allows to have a variable length header) 
1 byte offset to "fingerprint" 
x random bytes 
fingerprint = a short binary (preferably) or ascii constant text "MyDataIsOk" 
[optionally: length of the payload and/or a CRC/MD5/digest-of-sort for it] 
y random bytes 
followed by the actual message 

Упрощенный (но немного «опасный» для крипто) просто добавить, скажем, «MyDataIsGood123ABC» перед данными. Во время дешифрования вы должны убедиться, что дешифрованный поток начинается с этих 16 байтов байтов, и вы удалите их, чтобы получить фактическое сообщение.

+0

Thx, тест ASCII, вероятно, будет делать, любая идея, как я бы проверить, если бинарный файл зашифрован? Если нет, мне нужно будет написать какой-то тестовый пример, прежде чем продолжить весь файл? – zyrus001

+0

Будет ли создание тестового примера в моем коде сделать шифрование бессмысленным? т.е. если cipher.decrypt (s) == 'Flag': «Правильный ключ»: - мне нужно избегать разрушения данных, если ключ неверен. – zyrus001

+0

@ zyrus001 см. В редакции с идеей подтверждения достоверности/целостности сообщения. Кроме того, да, вам нужно будет сделать копию зашифрованного текста, если вы не уверены в ключе. – mjv

0

Взгляните на этом блоге, он включает в себя пример кода для делать то, что вам нужно (например. CRC)
Python symmetric encryption with CRC

+0

Могу я спросить, почему вы предложили схему, которая давно известна как слабая? Например, среди многих других Stubblebine и Gligor в своей статье «О целостности сообщений в криптографических протоколах», Симпозиум по исследованиям в области безопасности и конфиденциальности. 1992. – Accipitridae

+0

Спасибо, что ответили на ваш вопрос! Обязательно внимательно прочитайте [FAQ по самопомощи] (http://stackoverflow.com/faq#promotion). Также обратите внимание, что * требуется *, что вы публикуете отказ от ответственности каждый раз, когда вы ссылаетесь на свой собственный сайт/продукт. –

+0

Использование CRC, как известно, криптографически небезопасно. Не используйте то, что предлагает этот ответ. –

Смежные вопросы