2010-08-11 4 views
2

Python/M2Crypto를 사용하여 DSA 서명을 확인하는 데 문제가 있습니다. 서명은 Sun의 암호화 공급자 및 SHA1withDSA 알고리즘 지정과 함께 표준 java.security.Signature 클래스를 사용하여 Java로 생성됩니다. 그것은 두 개의 정수 (0x302c는 44 바이트 순서를 지정하고, 0x0214은을 지정하는 적절한 ASN.1 인코딩 시퀀스처럼 보이M2Crypto : DSA 서명 확인

>>> pk 
<M2Crypto.DSA.DSA_pub instance at 0x20b6a28> 
>>> sig = '302c02141c4bbb218215ebfec57288059ce814dc430d849502144dd0c581bf2213aff79d17eb37c939e120a97bd2'.decode('hex') 
>>> data ='0501...9794'.decode('hex') 
>>> pk.verify_asn1(sig, data) 
------------------------------------------------------------ 
Traceback (most recent call last): 
    ... 
DSAError: wrong tag 

서명 값 내게 OK 같다 : 여기

일부 쉘 출력의 20 바이트 정수)는 DSA 서명의 표준 인코딩입니다. DSA_pub.verify_asn1 방법조차 기록되지 않기 때문에

, 나는 또한 문서화 DSA_pub.verify 방법을 사용하여 시도,하지만 여전히 시가 :

>>> r = sig[4:24] 
>>> s = sig[26:] 
>>> md = sha1(data).digest() 
>>> pk.verify(md, r, s) 
------------------------------------------------------------ 
Traceback (most recent call last): 
    ... 
DSAError: encoding error 

모든 매개 변수를 "바이트 수 있어야 워드 프로세서 상태 문자열 "이지만 verify 메소드는 어떻게 든 인코딩 오류를 발생시킵니다. 또한 잠재적 인 엔디안 문제를 확인하기 위해 r과 s를 뒤집어 봤지만 도움이되지 않았습니다.

내가 뭘 잘못하고 있니? 다음 http://svn.osafoundation.org/m2crypto/trunk/tests/test_dsa.py

verify_asn1 방법이 사용되어야한다 :

답변

4

이 시험 용액에서 발견

>>> pk.verify_asn1(sha1(data).digest(), sig)