【问题标题】:Oracle TDE -- Salt and Encrypted DataOracle TDE——加盐和加密数据
【发布时间】:2020-11-03 11:27:42
【问题描述】:

对于 Oracle TDE,可以选择将盐添加到明文(默认情况下)或忽略盐(使用 NO SALT)参数。

  1. 我想知道 salt 是否在表中的每行/记录中是唯一的,或者在单个表中的所有行中是通用的。
  2. 有什么方法可以将加密值视为查询的结果? (打开钱包会给你实际的解密值,我在不打开钱包和设置主密钥的情况下尝试查询时出错)。

【问题讨论】:

    标签: oracle encryption salt tde


    【解决方案1】:

    关于您的问题:

    1. SALT 是在行级别生成的随机值。众所周知,在密码学中,salt 是一种增强加密数据安全性的方法,它通过在数据加密之前向数据添加随机字符串,使攻击者更难以窃取。由于它是随机的,因此总是有可能存在非唯一性,但通常它应该是唯一的。这 16 个字节被添加到列中,您可以通过块转储看到一些内容。 SALT 不能用于索引列。
    1. 没有办法做到这一点,这正是 TDE 的目标。为了查询数据,您需要打开钱包。当您的数据库包含使用 TDE 加密的表和列时,DBA 通常会为钱包配置自动登录,因此您无需在重启后手动进行。

    如果您想选择随意查询数据,无论是否加密,不依赖钱包,您可以在一个包中使用DBMS_CRYPTO来存储数据,使用函数随意加密或解密。你在这里有最后一点的一个很好的例子

    https://oracle-base.com/articles/10g/database-security-enhancements-10g#dbms_crypto

    【讨论】:

    • 感谢您的回答。让我重新表述第一个问题,表中每一行的 SALT 是不同的,还是特定表中所有行的 SALT 是通用的?
    • 每一行都不一样,因为该值是随机的,并且是在运行时生成的。它是专门添加在行尾的,所以当你禁用 Oracle 时,它​​知道需要从加密值中删除哪些字符
    • 您需要 salt 来解密数据,所以 Oracle 会为每一行存储 salt 对吗?这样做的背景是,我正在尝试查看是否可以为没有 TDE atm 的数据库实现加密/解密(但在应用程序级别)。我想看看我是否可以使用与 Oracle 类似的设计,因为它是主要参与者。每条记录加盐很难,因为您需要先查询加盐,然后才能对数据进行解密,但任何标识仍需要为记录加密。
    • 如果您想实现加密/解密并进行一些控制,请使用您自己的 pl/sql 代码和 dbms_crypto 而不使用 SALT 并且不使用 TDE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2012-11-18
    • 2011-09-19
    相关资源
    最近更新 更多