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 

 

OpenStack barbican的核心——**插件系统

 

p11_crypto插件

底层由pkcs11.py实现pkcs11接口,直接和硬件HSM或加密卡打交道,pkcs11.py通过cffi机制来实现python中调用HSM厂商提供的c语言lib库。

barbican初始化时,需要通过barbican_manager命令行工具,在HSM硬件中生成两个对称**:

MKEK:系统唯一根**,用来加密其它KEK(目前实现是每个项目一个KEK,用来加密用户**)

MKHK:与MKEK连用,用来计算经过MKEK加密后的HMAC值 

相关文章:

  • 2021-07-01
  • 2022-02-07
  • 2021-09-20
  • 2021-08-19
  • 2021-12-04
  • 2021-06-13
  • 2021-08-05
  • 2021-09-23
猜你喜欢
  • 2022-01-10
  • 2021-07-24
  • 2022-12-23
  • 2023-03-29
  • 2021-09-14
相关资源
相似解决方案