2014-03-12 335 views
1

此前我使用的是沒有填充的rsa簽名,但是現在我被要求添加PKCS1_OAEP填充,最初我試圖簡單地添加此標誌「RSA_PKCS1_OAEP_PADDING」,但它在運行時給出錯誤代碼,如下所示使用RSA_PKCS1_OAEP_PADDING進行RSA簽名

error:04066076:rsa routines:RSA_EAY_PRIVATE_ENCRYPT:unknown padding type 

而且我GOOGLE了關於與PKCS1_OAEP填充RSA簽名,但除了它是說,實施RSA_PKCS1_OAEP填充你必須使用這一個

int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, 
      unsigned char *f, int fl, unsigned char *p, int pl); 

然後做與private_encrypt沒有得到任何東西RSA_NO_padding b ut仍然有困惑,因爲他們沒有清楚地說明如何明確地使用這個padding_add函數。任何人都可以提供幫助,我們真的會明白這一點。

由於事先

回答

4

根據RFC 3447 OAEP填充方案只能與加密操作中使用,因此它不能與簽名一起使用。如果標準的RSASSA-PKCS1-v1_5方案對你來說不夠好,我相信你應該使用RSASSA-PSS,它推薦用於新的應用程序,並具有類似於OAEP方案的特性。有關更多詳情,請參閱RFC 3447

可以輕鬆地檢查出我的回答是用命令行的OpenSSL工具正確:

  1. 生成私鑰:

    openssl genrsa -out private.key 2048 
    
  2. 產生一些輸入數據:

    echo "Hello world" > input.data 
    
  3. 嘗試使用OAEP方案生成簽名:

    openssl rsautl -sign -oaep -inkey private.key -in input.data -out output.data 
    RSA operation error 
    139655304349344:error:04066076:rsa routines:RSA_EAY_PRIVATE_ENCRYPT:unknown padding type:rsa_eay.c:389: 
    
  4. 嘗試與原和方案的數據進行加密:

    openssl rsautl -encrypt -oaep -inkey private.key -in input.data -out output.data 
    

您還可以看看"rsautl" module source code,如果你需要更多的信息,但請記住,RFC 3347是你的朋友:)