问题标签 [symmetric-key]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 对称密钥存储
我的公司将为我们的客户存储敏感数据,并将使用托管的 .NET 加密算法类之一对数据进行加密。大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储密钥。我做了一些简单的搜索和阅读,看起来硬件解决方案可能是最安全的。有人对密钥存储解决方案或方法有任何建议吗?
谢谢大家的回复。
spoulson,问题实际上是您提到的两个“范围”。我想我应该更清楚。
数据本身以及对其进行加密和解密的逻辑都被抽象到 ASP.NET 配置文件提供程序中。此配置文件提供程序允许加密的配置文件属性以及纯文本属性。加密属性值的存储方式与纯文本值完全相同 - 明显的例外是它们已被加密。
也就是说,出于以下三个原因之一,需要能够召唤钥匙:
- 在授权服务器上运行的授权 Web 应用程序需要对数据进行加密。
- 与#1 相同,但用于解密数据。
- 我们业务团队的授权成员需要查看加密数据。
我想象的方式是没有人真正知道密钥 - 会有一个软件控制数据的实际加密和解密。也就是说,密钥仍然需要来自某个地方。
完全披露——如果你还不能说,我以前从来没有做过这样的事情,所以如果我完全不知道这应该如何工作,请告诉我。
sql-server - SQL Server 2005 - 在不同的服务器上恢复加密的数据库
我已经备份了一个加密数据库(对称密钥/证书)并将其恢复到另一台服务器上。
不幸的是,我们在解密时遇到了问题……希望有人能提供帮助。
在恢复的数据库中,我可以在 SSMS 中看到对称密钥和证书,但是当我尝试使用证书打开密钥(通过证书 CertB 打开对称密钥 KeyA 解密)时,我收到以下非常描述性的错误:
Msg 15466, Level 16, State 1, Line 1 解密时出错。
有任何想法吗?
提前致谢。
.net - 如何包装/存储 TripleDESCryptoServiceProvider 的密钥
我正在使用 DES 加密,我想存储 TripleDESCryptoServiceProvider 的密钥。
但是密钥由(Key + IV)组成,
我试图将它们保存在 XML 文件中
但由于 IV 在 XML 中包含无效字符“=”而出现异常。
有没有更好的方法来存储对称加密密钥?
encryption - 为什么更改三重 DES 密钥或初始值中的一位不会给出不同的加密数据?
我正在使用 pyDes 加密一些数据。我想证明,即使您更改密钥或初始值中的一位,加密的数据也会完全不同。我设置了 16 字节密钥以将最后一个字符更改 +/- 1,从而导致至少一位不同。但是,即使我这样做了,3 个不同的加密数据实例也并非完全不同。
如果我只对键或初始值进行小的更改,其中一个断言似乎会失败;我已经看到了两者d1 != d2
并且d1 != d3
失败取决于我改变什么。我还尝试更改'Hello'
以'Hello' * 50
确保不仅仅是输入数据太短的情况。
如果我制作完全随机的键,则断言通过。使用如上所示的程序,d1 != d3
失败(这些键相距一位;k1-k2 相差 2 位)。
我绝不是加密专家,但如果两个密钥仅相隔一位就产生相同的加密数据,那么这意味着暴力破解密钥所需的努力只是减少了两倍,对吧?
我错过了一些明显的东西吗?Triple DES 是否不应该为非常相似的密钥提供唯一的结果?或者这是 PyDes 中的一个错误?也许其他人可以在另一个实现中确认这种行为?
@Chris Jester-Young 的答案是密钥中的某些位是奇偶校验位。事实证明,根据这篇文章:
请注意,虽然 DES 的输入密钥长度为 64 位,但 DES 使用的实际密钥长度仅为 56 位。每个字节中的最低有效(最右边)位是奇偶校验位,应设置为每个字节中始终有奇数个 1。这些奇偶校验位被忽略,因此仅使用每个字节的七个最高有效位,导致密钥长度为 56 位。这意味着三重 DES 的有效密钥强度实际上是 168 位,因为三个密钥中的每一个都包含 8 个在加密过程中不使用的奇偶校验位。
(重点是我的)
这些奇偶校验位正是我在示例中更改的位。
谢谢克里斯!
.net - Rijndael托管密钥生成
我需要加密数据并将其存储在一个文件中,然后才能将其解密回来。为此,我正在使用 RijndaelManaged 类。现在我不想将密钥硬编码在代码中。经过一番谷歌搜索后,我发现了这种方法 -
这里生成了密钥,然后所有其他值(如密码、盐和 IV)都被硬编码。我没有让用户输入密码的选项,因此我还必须对这些值进行硬编码。那么这真的安全吗?一些黑客不能使用工具找到这些硬编码的值并找出关键吗?
c# - SQL 对称密钥并从 C# 打开它
我正在尝试通过对称密钥加密 SQL Server 中的数据。当用户通过 Web 表单提交数据时,我希望使用我保存在 SQL Server 中的对称密钥对数据进行加密。我试图找出如何做到这一点。目前,我运行以下命令:
这很好用 - 但是,当我尝试从我的 Web.Config 文件中打开密钥时,我得到一个错误。
C#代码:
Web.Config 文件
来自 try/catch 语句的错误:
错误号:102,错误消息:“myKey”附近的语法不正确。在:-2146232060 和 System.Data.SqlClient.SqlErrorCollection
问题/问题:
- 为什么我会收到错误消息?
- 我应该以不同的方式访问密钥或加密数据吗?
另外:我尝试将密钥名称从“myKey”更改为“myKeya”或类似的名称,然后出现此错误:
错误号:15151,错误消息:找不到对称密钥“myKeya”,因为它不存在或您没有权限。在:-2146232060 和 System.Data.SqlClient.SqlErrorCollection
当然,我使用的是与“myKey”不同的词,但我检查了我使用的词是否是任何类型的关键字,并且在 google、bing 和 msdn 的任何搜索中都没有出现......所以我我想我在那里很安全。这也提示我数据库实际上正在接收请求,但它需要一些不同风格的密钥。嗯……
sql-server-2008 - SQL Server 2008 + PCI 合规性?与 PCI 以及对称密钥有关!
我以前从未处理过 PCI 合规性问题。我一直在阅读他们的文件,上面说我需要保护信用卡号、有效期和持卡人姓名。从未存储安全代码。
在他们的文档中,它只是说保护。这是说我需要加密数据库中的这 3 列吗?我认为只有数字是需要加密的数据。无论哪种方式,我都很好。
如果我需要加密所有三列,我是否共享一个证书并拥有 3 个对称密钥,或者我只需要一个,并且在所有 3 列上都使用该对称密钥?我问的原因是在加密列的 BoL 文档中,密钥是专门以他们正在加密的列命名的。
感谢所有的帮助!
algorithm - 为什么 AES 比 DES 更安全?
我开始学习加密算法,并且了解上述算法的工作原理。AES的密钥长度更长吗?AES 加密的哪些步骤使其比 DES 更不容易受到攻击?
encryption - 为什么在对对称算法的蛮力攻击中,在尝试一半后有 50% 的机会找到密钥?
任何密码学文本都提到,在对对称算法的蛮力攻击中,有 50% 的机会在尝试一半后找到密钥。
例如,使用 56 位密钥的 DES 在前 2 55次尝试后将有 50% 的机会找到密钥。
为什么在针对任何对称加密算法的暴力攻击中,经过一半的尝试后有 50% 的机会找到密钥?它的数学证明是什么?