2017-12-15 2 views
1

rsa 키와 BLAKE2b 해시를 사용하여 메시지에 서명하려고 할 때 macOS 및 Ubuntu에서 다음 오류 메시지가 표시되었습니다.RSA 키로 메시지 서명시 예외 발생

InternalError: Unknown OpenSSL error. This error is commonly encountered 
when another library is not cleaning up the OpenSSL error stack. If you 
are using cryptography with another library that uses OpenSSL try 
disabling it before reporting a bug. Otherwise please file an issue at 
https://github.com/pyca/cryptography/issues with information on how to 
reproduce this. ([]) 

어디서 디버깅을 시작 해야할지 모릅니다. 내가 여기서 누락 된 것이 있습니까? rsa 서명으로 BLAKE2b 해시를 사용할 수 없습니까?

In [1]: from cryptography.hazmat.backends import default_backend 
     from cryptography.hazmat.primitives import hashes 
     from cryptography.hazmat.primitives.asymmetric import padding, rsa 

In [2]: private_key = rsa.generate_private_key(
      public_exponent=65537, 
      key_size=4096, 
      backend=default_backend() 
     ) 

In [3]: message = b'The quick brown fox jumps over the lazy dog' 
     signature = private_key.sign(
      message, 
      padding.PSS(
       mgf=padding.MGF1(hashes.BLAKE2b(64)), 
       salt_length=padding.PSS.MAX_LENGTH 
      ), 
      hashes.BLAKE2b(64) 
     ) 

역 추적 매우 결정적이다

<ipython-input-3-6b4492bdbf5d> in <module>() 
     6   salt_length=padding.PSS.MAX_LENGTH 
     7 ), 
----> 8  hashes.BLAKE2b(64) 
     9) 

/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/rsa.py in sign(self, data, padding, algorithm) 
    413    self._backend, data, algorithm 
    414  ) 
--> 415   return _rsa_sig_sign(self._backend, padding, algorithm, self, data) 
    416 
    417 

/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/rsa.py in _rsa_sig_sign(backend, padding, algorithm, private_key, data) 
    220  pkey_ctx = _rsa_sig_setup(
    221   backend, padding, algorithm, private_key, data, 
--> 222   backend._lib.EVP_PKEY_sign_init 
    223 ) 
    224  buflen = backend._ffi.new("size_t *") 

/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/rsa.py in _rsa_sig_setup(backend, padding, algorithm, key, data, init_func) 
    191  padding_enum = _rsa_sig_determine_padding(backend, key, padding, algorithm) 
    192  evp_md = backend._lib.EVP_get_digestbyname(algorithm.name.encode("ascii")) 
--> 193  backend.openssl_assert(evp_md != backend._ffi.NULL) 
    194  pkey_ctx = backend._lib.EVP_PKEY_CTX_new(key._evp_pkey, backend._ffi.NULL) 
    195  backend.openssl_assert(pkey_ctx != backend._ffi.NULL) 

/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py in openssl_assert(self, ok) 
    104 
    105  def openssl_assert(self, ok): 
--> 106   return binding._openssl_assert(self._lib, ok) 
    107 
    108  def activate_builtin_random(self): 

/usr/local/lib/python3.6/site-packages/cryptography/hazmat/bindings/openssl/binding.py in _openssl_assert(lib, ok) 
    73    "issues with information on how to reproduce " 
    74    "this. ({0!r})".format(errors_with_text), 
---> 75    errors_with_text 
    76  ) 
    77 
+0

는 PSS 사양을 보였다면서 (섹션 8.1 및 [PKCS # 1] (HTTPS에서 9.1.1 : //tools.ietf.org/html/rfc8017) 이전의 가설 중 어느 것도 맞지 않습니다. PSS 패딩은 해시에 대한 객체 식별자 (OID)를 서명에 포함하지 않으므로 OpenSSL은 BLAKE2b와 PSS가 특정 알고리즘 세트로 해시를 제한하지 않습니다 . – lockcmpxchg8b

+0

두 번째로 보았을 때 소금 길이가 너무 길지 않은지 궁금합니다. 'padding.PSS.MAX_LENGTH'를 해석하는 방법을 정확하게 모르지만 '512 - - 2' – lockcmpxchg8b

+0

@ lockcmpxchg8b :'salt_length = 256'을 시도했지만 동일한 오류가 발생했습니다. Traceback을 추가했습니다. –

답변

0

. 추적에서 OpenSSL은 BLAKE2b가 무엇인지 알지 못합니다. 라인 (192) 시도가 이름을 조회하고 조회 NULL 반환하기 때문에 라인 193은 어설 션 실패

192  evp_md = backend._lib.EVP_get_digestbyname(algorithm.name.encode("ascii")) 
--> 193  backend.openssl_assert(evp_md != backend._ffi.NULL)