2014-07-09 2 views
4

서명을 생성하기 위해 OpenSSL 지시를 따르고 있습니다. 나는 루비 2.1.0을 사용 중이며 다음과 같은 서명을 생성하고있다.OpenSSL 라이브러리에서 문서 서명시 SHA 해시의 역할은 무엇입니까?

document = "This is a simple string document to be signed" 
key = OpenSSL::PKey::RSA.new([private_key]) 
digest = OpenSSL::Digest::SHA256.new 
signature = key.sign digest, document 

서명이 전송되어 검증 할 대상에 도달한다. 확인하려면, 나는 다음과 같이 수행

key = OpenSSL::PKey::RSA.new([pubkey]) 
digest = OpenSSL::Digest::SHA256.new 
key.verify digest, signature, document # => valid 

우리가 문서 또는 서명 한 편지를 변경하면이 때문에 작동하고,이 잘못된 결과를 반환합니다

key.verify digest, signature, changed_document # => Invalid 

그러나 다른 SHA와

의 확인 명령은 여전히 ​​유효한 결과를 가져옵니다.

digest = OpenSSL::Digest::SHA256.new('this will generate different SHA') 
key.verify digest, signature, document # => valid 

나를 혼란스럽게합니다. 다른 SHA 해시가 잘못된 결과를 가져 오지 않아야합니까? 여기서 다이제스트의 역할은 무엇입니까?

답변

2

OpenSSL::Digest::SHA256.new에 인수를 전달하면 해당 데이터가 요약에 추가됩니다.

그러나 openssl 서명 함수는 사용되기 전에 다이제스트를 다시 설정하므로이 특별한 경우에는 추가 데이터가 아무런 영향을 미치지 않습니다.

+0

왜 그렇게했는지에 대한 자세한 정보를 제공해 주시겠습니까? _ 다른 SHA 해시가 잘못된 결과를 초래하지 않아야합니까? _ –

+0

이것은 동일한 SHA 해싱 기능입니다. 두 번째 경우에는 몇 가지 초기 데이터를 제공합니다. 따라서 초기 데이터가 처음에는 없었던 것처럼 결과가 삭제됩니다. 왜 내가 다이제스트 객체를 재사용하기가 더 쉽다고 생각하는지에 관해서는 –

+0

Ok. 보시다시피 저는 문서에 디지털 서명을하려고합니다. 그런 다음 문서에 서명하는 데 사용한 방법이 맞다고 생각할 수 있습니까? –

관련 문제