zoukankan      html  css  js  c++  java
  • 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值 
  • 相关阅读:
    [CF1475F] Unusual Matrix
    [JXOI2018] 游戏
    [ZJOI2010] 排列计数
    [CF1474E] What Is It?
    [CF375D] Tree and Queries
    [CF519E] A and B and Lecture Rooms
    [CF321C] Ciel the Commander
    [CF1C] Ancient Berland Circus
    [CF321A] Ciel and Robot
    [CF1450C1] Errich-Tac-Toe (Easy Version)
  • 原文地址:https://www.cnblogs.com/tian-jiang-ming/p/8718642.html
Copyright © 2011-2022 走看看