kms(Key Management Service),在需要加解密的应用中必不可少,实现上利用了密码学相关对称,非对称算法,密钥交换协议等。这些算计算机基础知识,有两个名词KEK和DEK 需要额外解释。
概念解释
DEK:(Data Encryption Key,数据加密密钥),即对数据进行加密的密钥。
- 每条记录均使用不同的DEK(随机生成)。
- DEK不能明文存储,需要使用KEK再次加密。
- DEK在加密后建议随密文数据一起存储,可用于大数据场景。当只有少量的DEK且预期不会增长时,才会考虑存储在KMS(不推荐)。
KEK:(Key Encryption Key,密钥加密密钥),即对DEK进行加密的密钥。
- 每个应用或每个用户在每个应用中应该使用不同的KEK。
- KEK加密存储在KMS系统中,不随密文数据一起存储,通常也不应存储在应用自身。
加解密流程
加密时,使用随机生成的DEK对明文数据进行加密,使用KEK对随机DEK加密,最后加密后的数据和加密后的DEK一并写入数据库(或其他存储系统)
解密时,从数据库或存储系统提取密文数据和密文DEK,先使用KEK对密文DEK进行解密,得到明文的DEK,再使用明文的DEK对密文数据进行解密,得到明文数据。
因此加解密时都需要KMS 系统和业务本身参与,黑客即使获取了某一个密钥也无法获得明文数据。