barbican的核心——密鑰插件系統

barbican的核心是加解密以及密鑰的存儲。基本思想是初始化時生成一個根密鑰,安全的存儲在硬件HSM中,沒法讀出,智能進行加解密操做。全部的應用密鑰在存儲在數據庫中以前,都是通過根密鑰加密的,所以不怕數據庫被拖庫。使用密鑰時,從數據庫讀出密文,用根密鑰解密後獲取明文,再使用。
 
密鑰存儲、生成、加解密這部分,barbican充分利用的openstack的插件思想,進行抽象化設計,能夠支持不一樣的軟件、硬件密鑰管理方案,如PKCS11硬件、KMIP硬件等。
 
插件的基類,定義了對稱、非對稱密鑰的產生、存儲接口
plugin.interface.secret_store.SecretStoreBase
 
 
基於此基類的三個插件:
plugin.store_crypto.StoreCryptoAdapterPlugin
plugin.dogtag.DogtagKRAPlugin
plugin.mip_secret_store.KMIPSecretStore
 
其中,DogtagKRAPlugin 和 KMIPSecretStore插件自帶密鑰的產生、存儲功能
而相似HSM的設備只有密鑰產生、加密解密的功能,不帶存儲功能,只能由plugin.store_crypto.StoreCryptoAdapterPlugin插件做爲一個橋接層,提供存儲和密鑰產生的功能。
其中密鑰存儲功能由StoreCryptoAdapterPlugin插件提供,加密、解密、產生密鑰功能又由一系列的crypto插件提供:
基類:
plugin.crypto.base.CryptoPluginBase
插件:
plugin.crypto.simple_crypto.SimpleCryptoPlugin
plugin.crypto.p11_crypto.P11CryptoPlugin 
 

 

 
=======================================
p11_crypto插件
底層由pkcs11.py實現pkcs11接口,直接和硬件HSM或加密卡打交道,pkcs11.py經過cffi機制來實現python中調用HSM廠商提供的c語言lib庫。
barbican初始化時,須要經過barbican_manager命令行工具,在HSM硬件中生成兩個對稱密鑰:
MKEK:系統惟一根密鑰,用來加密其它KEK(目前實現是每一個項目一個KEK,用來加密用戶密鑰)
MKHK:與MKEK連用,用來計算通過MKEK加密後的HMAC值 
相關文章
相關標籤/搜索