OpenStack 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值 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值