2009-03-18 5 views
4

저는 파이썬 암호화 라이브러리를 대부분 보았습니다. PyCrypto 나 M2Crypto를 사용하기로했습니다.
ezPyCrypto는 성숙하지 않았기 때문에 서명 및 Keyczar 용 MD5 만 지원하므로 폐기되었습니다.Python : RSA 패딩을 추가하는 방법?

암호화 된 텍스트 (또는 서명 해시)가 제대로 패딩되지 않은 경우 RSA는 여러 가지 공격에 취약하다는 사실을 읽었습니다.
그 의미는 무엇입니까?
PyCrypto 나 M2Crypto는 이것에 대해 언급하지 않았으며 Google은 관련있는 것을 찾지 못했습니다. 이 라이브러리가 자동으로 패드를 추가합니까? 어떻게 알 수 있습니까?

위의 답변이 '아니오'인 경우 적절한 패딩으로 간주되는 것은 무엇입니까? 내가 최근에 암호화를 알아내는 통해 싸웠다

답변

6

PyCrypto는 언급 한 패딩을 추가하지 않습니다.
대신 M2Crypto가 해당됩니다.

M2Crypto는 openSSL 위에 구축되며, 필요한 모든 기능을 지원하며, PyCrypto가 몇 가지 폐지 경고를 발행하는 동안 계속 유지되고 최신 상태입니다.

+1

이것이 100 % 정결한지 잘 모르겠지만 (pycrypto로) 작동합니다. https://github.com/Brant/EncryptionExample/blob/master/python/encrypt.py –

0

완전히 확실하지,하지만 당신은 당신의 RSA 메시지에 임의의 구성 요소를 추가하는 경우가 방지 사전 공격은 ...이 문서는 패딩으로, 표준 있었는지 설명에 많이 도움 :

http://www.di-mgt.com.au/cryptopad.html

필요한 경우

내가 몇 가지 코드 조각을 공유 할 수 있습니다 (저를 구현하기위한 방법의 하나는 쉬운 듯).

P. 이 파일은 보안 키 (Google 용)를 만드는 데 도움이되었습니다. PBKDF2.py - PKCS # 5 v2.0 비밀번호 기반 키 유도

1

3

임의의 이유 중 하나는 패딩은 " 책 "RSA는 지수가 낮을 때 (정확히 말하면 3 개) 정확하게 동일한 메시지가 여러 사람에게 보내지는 경우 (세 개).

따라서 이전에 메시지에 임의의 (아직 변환 할 수없는) 변형을 적용하여 똑같은 메시지를 보내지 않는 것이 좋습니다.

어쩌면 그것이 패딩이란 무엇입니까?

편집 : 나는 위키피디아를 보았다. 내가 말한 것은 하 스타드의 공격이라고 불린다.

0

우선, 사실상의 표준이므로 AES를 사용해야합니다.

AES는 16 바이트 블록 크기의 바이트를 암호화합니다. 분명히 이것은 어떤 큰 데이터라도 잘 동작합니다. 하지만 마지막 비트는 분명히 16 바이트보다 작을 것입니다.

마지막 블록의 경우 패드를 채워야하며 일반적인 패딩은 PCKS7을 통해 이루어지며 이는 매우 간단합니다.

마지막 블록으로 'icecream'문자열이 있다고 가정 해 보겠습니다.

"icecream"

8 바이트, 그래서 당신은 블록을 만들기 위해 또 다른 8 바이트가 필요

그래서 당신은 단순히겠습니까 문자 8 (안 '8') 8 회

"icecream\x08\x08\x08\x08\x08\x08\x08\x08" 

를 추가한다 무엇을 결과 문자열. 이제 데이터를 암호화하십시오.

해독하는 동안이 마지막 블록을 잡아서 사용하기 전에 패딩을 제거해야합니다.