我是否必须在客户端保护列主加密密钥,以便没有人可以读取它? 当有人拥有列和主加密时,攻击者可以解密密钥数据是否正确?
此致
答案 0 :(得分:1)
我必须确保...以便没有人能够阅读它
此声明永远不会成真。如果应用程序需要读取密钥(密钥),那么网站上的管理员也可以。如果您在客户端运行应用程序,则无法阻止确定的客户端查找密钥。对于已经危害该位置的攻击者而言同样如此。
始终加密方案适用于不信任其服务托管的应用程序(例如Azure SQL数据库)。应用程序具有密钥并可以操纵数据,并且数据传输到托管服务并以加密方式存储。托管服务无法解密您的数据。这一切都是the starting paragraph describing the feature:
始终加密是一项旨在保护存储在Azure SQL数据库或SQL Server数据库中的敏感数据(如信用卡号或国家标识号(例如美国社会保险号))的功能。 Always Encrypted允许客户端加密客户端应用程序内的敏感数据,并且永远不会泄露数据库引擎(SQL数据库或SQL Server)的加密密钥。因此,始终加密会在拥有数据(并且可以查看数据)的人与管理数据的人(但应该没有访问权限)之间进行分隔。通过确保本地数据库管理员,云数据库操作员或其他高权限但未经授权的用户无法访问加密数据,Always Encrypted使客户能够自信地将敏感数据存储在其直接控制之外。这允许组织加密静态数据并用于Azure中的存储,以便将本地数据库管理委派给第三方,或者降低其DBA员工的安全许可要求。
答案 1 :(得分:0)
您的理解是正确的,粗略地说,Always Encrypted提供以下安全保证,只有有权访问ColumnMasterKey(证书)的实体才能看到纯文本数据。因此,您必须确保您的CMK只能由受信任的实体访问。此外,最佳做法是将客户端应用程序和数据库放在不同的计算机上。
我提供了有关Always Encrypted here提供的安全保障的简短详细说明。你可能会觉得这很有用。如果您还有其他问题,请发表评论,我会尽力帮助