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 해시가 잘못된 결과를 가져 오지 않아야합니까? 여기서 다이제스트의 역할은 무엇입니까?
왜 그렇게했는지에 대한 자세한 정보를 제공해 주시겠습니까? _ 다른 SHA 해시가 잘못된 결과를 초래하지 않아야합니까? _ –
이것은 동일한 SHA 해싱 기능입니다. 두 번째 경우에는 몇 가지 초기 데이터를 제공합니다. 따라서 초기 데이터가 처음에는 없었던 것처럼 결과가 삭제됩니다. 왜 내가 다이제스트 객체를 재사용하기가 더 쉽다고 생각하는지에 관해서는 –
Ok. 보시다시피 저는 문서에 디지털 서명을하려고합니다. 그런 다음 문서에 서명하는 데 사용한 방법이 맞다고 생각할 수 있습니까? –