2011-03-02 5 views
2

암호화 링크를 사용하여 C++ 응용 프로그램과 통신하기 위해 Python 응용 프로그램을 얻으려는 동안 대화를 못했습니다. 우리가 실수로 OFB 모드에서 암호화하도록 파이썬에게 말하면, CFB 모드의 C++에서 성공적으로 암호 해독을한다는 것을 발견했습니다.AES 암호화 문제 : Python pycrypt OFB = C++ Gladman CFB

python pycrypt 라이브러리와 C++ Gladman 라이브러리 모두 높은 평가를 받고 있으므로 잘못 될 수 있습니까?

이상하게도 첫 번째 바이트는 양 끝에서 OFB 또는 CFB를 사용할 때 확인을 해독하는 것으로 보입니다. 표준 테스트 벡터는 첫 번째 바이트 만 테스트하기 때문에 (이 테스트에 대한 전문 지식이 아니며 테스트 벡터를 이해하지 못할 수도 있습니다) 두 알고리즘 모두 표준 테스트를 통과 할 수 있습니까?

+0

업데이트 : 파이썬 OFB에서 C++로 CFB는 한 블록의 데이터에 대해서만 작동합니다. 그런 다음 횡설수설로 변합니다! ECB만이이 둘 사이에서 제대로 작동하는 것 같습니다. 매우 안전하지 않다! –

+0

다른 C++ 구현 시도, 동일한 데이터를 얻었으므로 오류가있는 pycrypt 인 것처럼 보입니다. –

+0

이러한 '표준 테스트 벡터'는 무엇입니까? 나는 그들이 첫번째 바이트를 테스트하지 않는다는 것을 확신한다, 그것은 어리석은 것 이상의 것이다. – TonyK

답변

3

PyCrypto는 기본적으로 8 비트 CFB 모드를 사용합니다. 나는 다른 쪽이 블록 크기의 CFB 모드를 사용한다고 생각한다. 세그먼트 크기 (비트 단위)는 키워드 인수에 의해 AES.new으로 설정되고 블록 크기 CFB 모드의 경우 AES.block_size*8이어야합니다.

첫 번째 블록 OFB 모드는 블록 크기 CFB 모드와 동일합니다.

+0

8 비트 CFB 모드의 의미를 이해하지 못합니다. CFB 모드에서 한 블록 암호화의 출력은 다음 블록 암호화의 IV가됩니다. 모호함은 어디에 있습니까? [wikipedia] (http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29)의 모드에 대한 좋은 설명이 있습니다.이 세그먼트 크기에 대한 정보를 추가하지 않았 으면 좋겠습니까? –

+0

@Richard - CFB는 세그먼트 크기 인 _s_ 매개 변수가있는 [모드 계열]로 정의됩니다 (http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf). 따라서 8 비트의 세그먼트를 가질 수 있으며 모든 암호 출력에 대해 plaintext로 xor로 상위 8 비트 만 가져옵니다. 요점은 1 비트 전송 오류가 발생하면 2 바이트가 아니라 2 바이트 만 잘못 처리된다는 것입니다. – aaz

관련 문제