특정 패딩 기술을 사용하여 M2Crypto와 Python의 문서에 서명하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1677594

문제

.pem 파일에 저장된 개인 키를 사용하여 Python의 일부 텍스트에 디지털로 서명해야합니다. M2Crypto가 요즘 그렇게하는 선호하는 방법 인 것 같습니다. 그래서 그것이 제가 사용하는 것입니다. 나는 그것의 대부분을 얻는다고 생각하지만 패딩을 구성하는 방법에 대해 혼란스러워합니다. 구체적으로 말하면, iPhone 앱의 서명을 확인해야합니다. kSecPaddingPKCS1SHA1 다음과 같이 설명합니다.

서명 할 데이터는 SHA1 해시입니다. 기본 RSA 작업의 PKCS1 패딩뿐만 아니라 표준 ASN.1 패딩이 수행됩니다.

암호화 전문가가 아니라, 나는 이것이 무엇을 의미하는지 퍼지 아이디어 만 가지고 있습니다. 나는 RFC 중 일부를 보려고 노력했지만 뚫을 수 없다는 것을 알았습니다. RSA 객체의 암호화/암호 해독 방법은 패딩 유형을 취하지 만 서명 검증과 관련된 것은 보이지 않습니다.

특히 코드에 대한 모든 도움에 감사드립니다.

(어떤 의미에서는 이것이 반대입니다 이 질문.)


좋아, 아래에 주어진 답은 올바른 afaict입니다. 다음 코드는 서명을 생성합니다 text 이를 사용하여 iPhone에서 검증됩니다 kSecPaddingPKCS1SHA1 패딩 체계.

from M2Crypto import EVP
privkey = EVP.load_key("privkey.pem")
privkey.sign_init()
privkey.sign_update(text)
signature = privkey.sign_final()

(편집에 미안하지만 암호화 해커가 우주에서 가장 좋은 문서 작가 중 일부라고 말할 수 있습니까?)

도움이 되었습니까?

해결책

Afaik M2Crypto는 필요한 위치에 패딩을 추가합니다.

PKCS1 패딩이 기본값입니다.

그러나 (AFAIK 만), 서명에는 패딩이 없으며 패딩이 암호화 된 데이터에만 추가되어 공격을 방지합니다.
편집 : 사용자 CAF, 의견에 따르면 패딩은 좋은 서명에 대한 essnetial이라고합니다. 기본 M2Crypto 동작으로 시도해 보는 것이 좋습니다. 추가 할 수 있습니다.

M2Crypto의 생성 된 문서에서 {public, private} _ {encrypt, decrypt} 메소드에는 패딩 옵션이 있는데, 이는 기본적으로 pkcs1 인 반면, 멘토드는 없음을 알 수 있습니다.

IMO는 기본 M2Crypto Params로 촬영하면 작동 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top