web python pkcs11_使用pkcs11模块用公钥加密数据失败
我使用Python的pkcs11包訪問存儲在Yubikey 5上的X.509證書。使用pkcs11對象訪問證書、公鑰和私鑰可以正常工作,就像簽名和簽名驗證一樣。然而,在我的一生中,我不明白為什么用公鑰加密不起作用。這是我的代碼:import pkcs11
from pkcs11 import Attribute, ObjectClass, KeyType, util
lib = pkcs11.lib('/usr/lib/x86_64-linux-gnu/pkcs11/onepin-opensc-pkcs11.so')
token = lib.get_token(token_label='PIV Card Holder pin (PIV_II)'
session = token.open(user_pin=pin)
# Getting a private and a public key as pkcs11 Object
private = next(session.get_objects({
Attribute.CLASS: ObjectClass.PRIVATE_KEY,
}))
public = next(session.get_objects({
Attribute.CLASS: ObjectClass.PUBLIC_KEY,
}))
data = 'Hello, world!'
sig = private.sign(data) # Works!
sig_verif = public.verify(data, sig) # Works!
print("Signature is valid? "+str(sig_verif)) # True
# So far, everything above worked fine.
# ----------
# Now, this is the part that does not work
encrypt_data = public.encrypt(data) # Fails!
上面的最后一行因pkcs11而失敗。exceptions.function不支持錯誤。我做了一些研究,我發現的解釋似乎暗示著我正在使用的openSC庫文件(*.so)不支持這個函數(encrypt)。然而,我覺得很難相信簽名功能工作得很好。在
為了確保我可以在會話上下文之外使用這個特定的公鑰,我使用加密包嘗試了以下代碼:
^{pr2}$
所以,似乎使用我的獨立公鑰可以加密數據。但是為什么我不能在pkcs11令牌會話的上下文中執行呢?在
然后,我嘗試使用pkcs11 Object decrypt函數對上面使用Crypto module生成的數據進行解密:decrypted = private.decrypt(encr_data) # It fails!
上述結果因pkcs11的pkcs11而失敗。異常。機械無效錯誤。我嘗試使用不同的機制,但所有這些都導致了相同的錯誤。有趣的是,pkcs11對象至少允許我調用decrypt函數,而不會抱怨它不受支持。在
還有一件事我應該提一下。我檢查了我的證書,在Extension->;certificate Key Usage下,它顯示:Critical
Signing
Key Encipherment
我讀到了密鑰加密和數據加密的區別,發現密鑰加密是用來加密秘密(對稱)密鑰而不是數據。這是我不能在這個令牌會話中使用加密函數的原因嗎?在
如有任何反饋,我們將不勝感激!在
總結
以上是生活随笔為你收集整理的web python pkcs11_使用pkcs11模块用公钥加密数据失败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 越级登场!真我GT Neo5 SE率先搭
- 下一篇: 三星 Galaxy Watch 5 /