问题标签 [cryptography]
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.
java - SecureRandom:初始化一次还是每次都需要?
我们的团队正在使用 SecureRandom 生成密钥对列表(SecureRandom 被传递给 KeyPairGenerator)。我们无法就使用以下两个选项中的哪一个达成一致:
每次我们需要生成密钥对时创建一个新实例
初始化一个静态实例并将其用于所有密钥对
哪种方法通常更好,为什么?
补充:我的直觉是第二种选择更安全。但我唯一的论点是基于伪随机性源自当前时间戳的假设的理论攻击:有人可能会看到密钥对的创建时间,猜测周围时间间隔内的时间戳,计算可能的伪随机序列,并获得关键材料。
补充:我关于基于时间戳的确定性的假设是错误的。这就是 Random 和 SecureRandom 之间的区别。所以,看起来答案是:就安全性而言,这并不重要。
c++ - 验证 EXE 上的 Authenticode 签名 - 没有 CAPICOM 的 C++
我正在为安装程序 DLL 编写一个函数,以验证系统上已安装的 EXE 文件的 Authenticode 签名。
该功能需要:
A) 验证签名是否有效。
B) 验证签名者是我们的组织。
因为它在安装程序中,并且因为它需要在较旧的 Win2k 安装上运行,所以我不想依赖 CAPICOM.dll,因为它可能不在目标系统上。
WinVerifyTrust API 非常适合解决 (A) 。
我需要找到一种方法来将已知证书(或其中的属性)与签署相关 EXE 的证书进行比较。
cryptography - 有没有办法使用 CryptoAPI 创建私钥并为其播种?
我们需要创建一个以 2 个明文密钥为种子的私钥。2 个明文密钥由不同的管理器维护。这是为了满足我们拥有的双重控制关键要求。我们可以将这两个键组合成一个种子。但是,通过阅读 Microsoft CryptoAPI 文档,所有密钥生成都是完全随机的,无法提供种子。这是真的?如果是,您能否建议创建此密钥的替代解决方案?
注意:密钥将存储在密钥容器中并标记为不可导出。
cryptography - 是否存在可证明 NP 难以击败的公钥加密算法?
如果实用的量子计算成为现实,我想知道是否有任何基于 NP 完全问题的公钥密码算法,而不是整数分解或离散对数。
编辑:
请查看 关于量子计算机的 wiki 文章的“计算复杂性理论中的量子计算”部分。 它指出,量子计算机可以回答的问题类别(BQP)被认为比 NP-完全更容易。
编辑2:
“基于 NP 完全”是表达我感兴趣的东西的不好方式。
我想问的是一种公钥加密算法,其属性是任何破解加密的方法也可以用来破解潜在的NP完全问题。这意味着破解加密证明 P=NP。
java - 你能弄清楚为什么这个程序会触发 IllegalStateException 吗?
~/Cipher/nsdl/crypto 中的所有文件都可以在这里找到 用 gcj 编译的 java 文件,请参阅 compile.sh
BlockCrypt.java:
cryptTest.java:
java - 基于浏览器的文档签名(带数字签名)的最佳跨浏览器解决方案是什么?
我需要实现一个基于浏览器的组件(很可能是 java 小程序,因为它需要跨浏览器),它允许我们对 XadES 格式的数据进行数字签名和验证。有哪些可用选项以及最佳解决方案是什么?
java - 使用java加密整数
我正在尝试使用 java.security 和 javax.crypto 在 java 中加密一些整数。
问题似乎是 Cipher 类只加密字节数组。我不能直接将整数转换为字节字符串(或者我可以吗?)。做这个的最好方式是什么?
我应该将整数转换为字符串并将字符串转换为字节 [] 吗?这似乎太低效了。
有谁知道快速/简单或有效的方法?
请告诉我。
提前致谢。
吉布
python - Python crypt 模块——盐的正确用法是什么?
首先,上下文:我正在尝试创建一个需要登录的基于命令行的工具(Linux)。此工具上的帐户与系统级帐户无关——这些都与 /etc/passwd 无关。
我计划使用与 /etc/passwd 相同的格式(大致)将用户帐户存储在文本文件中。
尽管不使用系统级密码文件,但与以明文形式存储密码相比,使用 crypt 似乎是一种很好的做法。(虽然 crypt 肯定比以明文形式存储密码更好,但我对其他方法持开放态度。)
我的地穴知识基于此: https ://docs.python.org/2/library/crypt.html
该文档似乎要求一些不可能的事情:“建议在检查密码时使用完整的加密密码作为盐。”
嗯?如果我正在创建加密密码(如创建用户记录时),我如何将加密密码用作盐?它还不存在。(我假设您必须使用相同的盐来创建和检查密码。)
我试过使用明文密码作为盐。这确实有效,但有两个问题;一种容易克服,一种严重:
1)明文密码的前两个字母包含在加密密码中。您可以通过不将前两个字符写入文件来解决此问题:
2)通过使用明文密码作为盐,您似乎正在减少系统中的熵量。可能我误解了盐的用途。
我能够得出的最佳实践是使用用户名中的前两个字符作为盐。这是合适的,还是我错过了什么使这成为一个糟糕的举动?
我对盐的理解是它可以防止从字典中预先计算密码哈希。我可以对所有密码使用标准盐(例如我的首字母“JS”),但这对于攻击者来说似乎比使用每个用户用户名中的两个字符要少。
hash - 为什么 MD5 哈希值不可逆?
我一直想知道的一个概念是加密哈希函数和值的使用。我知道这些函数可以生成一个唯一且几乎不可能反转的哈希值,但这是我一直想知道的:
如果在我的服务器上,我会在 PHP 中生成:
当您通过 MD5 函数运行相同的字符串时,您会在 PHP 安装中得到相同的结果。一个过程被用来从一些初始值产生一些价值。
这是否意味着有某种方法可以解构正在发生的事情并反转哈希值?
这些函数是什么使生成的字符串无法回溯?
c++ - 使用 C++ 在 Mac 上使用智能卡对数据进行签名
Mac OS X 中是否支持使用智能卡对数据进行签名?我查看了系统头文件,发现只有对智能卡支持的模糊引用(在 SecKeychain.h 中),这并没有真正带我去任何地方。
如果没有内置支持,我的选择是什么(即存在哪些免费/非免费库可以帮助我)?