특정 패딩 기술을 사용하여 M2Crypto와 Python의 문서에 서명하는 방법은 무엇입니까?
-
16-09-2019 - |
문제
.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로 촬영하면 작동 할 것입니다.