问题标签 [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.

0 投票
8 回答
14138 浏览

java - SecureRandom:初始化一次还是每次都需要?

我们的团队正在使用 SecureRandom 生成密钥对列表(SecureRandom 被传递给 KeyPairGenerator)。我们无法就使用以下两个选项中的哪一个达成一致:

  1. 每次我们需要生成密钥对时创建一个新实例

  2. 初始化一个静态实例并将其用于所有密钥对

哪种方法通常更好,为什么

补充:我的直觉是第二种选择更安全。但我唯一的论点是基于伪随机性源自当前时间戳的假设的理论攻击:有人可能会看到密钥对的创建时间,猜测周围时间间隔内的时间戳,计算可能的伪随机序列,并获得关键材料。

补充:我关于基于时间戳的确定性的假设是错误的。这就是 Random 和 SecureRandom 之间的区别。所以,看起来答案是:就安全性而言,这并不重要。

0 投票
2 回答
12844 浏览

c++ - 验证 EXE 上的 Authenticode 签名 - 没有 CAPICOM 的 C++

我正在为安装程序 DLL 编写一个函数,以验证系统上已安装的 EXE 文件的 Authenticode 签名。

该功能需要:

A) 验证签名是否有效。
B) 验证签名者是我们的组织。

因为它在安装程序中,并且因为它需要在较旧的 Win2k 安装上运行,所以我不想依赖 CAPICOM.dll,因为它可能不在目标系统上。

WinVerifyTrust API 非常适合解决 (A)

我需要找到一种方法来将已知证书(或其中的属性)与签署相关 EXE 的证书进行比较。

0 投票
1 回答
719 浏览

cryptography - 有没有办法使用 CryptoAPI 创建私钥并为其播种?

我们需要创建一个以 2 个明文密钥为种子的私钥。2 个明文密钥由不同的管理器维护。这是为了满足我们拥有的双重控制关键要求。我们可以将这两个键组合成一个种子。但是,通过阅读 Microsoft CryptoAPI 文档,所有密钥生成都是完全随机的,无法提供种子。这是真的?如果是,您能否建议创建此密钥的替代解决方案?

注意:密钥将存储在密钥容器中并标记为不可导出。

0 投票
11 回答
9143 浏览

cryptography - 是否存在可证明 NP 难以击败的公钥加密算法?

如果实用的量子计算成为现实,我想知道是否有任何基于 NP 完全问题的公钥密码算法,而不是整数分解或离散对数。

编辑:

请查看 关于量子计算机的 wiki 文章的“计算复杂性理论中的量子计算”部分。 它指出,量子计算机可以回答的问题类别(BQP)被认为比 NP-完全更容易。

编辑2:

“基于 NP 完全”是表达我感兴趣的东西的不好方式。

我想问的是一种公钥加密算法,其属性是任何破解加密的方法也可以用来破解潜在的NP完全问题。这意味着破解加密证明 P=NP。

0 投票
2 回答
3103 浏览

java - 你能弄清楚为什么这个程序会触发 IllegalStateException 吗?

~/Cipher/nsdl/crypto 中的所有文件都可以在这里找到 用 gcj 编译的 java 文件,请参阅 compile.sh

BlockCrypt.java:

cryptTest.java:

0 投票
2 回答
974 浏览

java - 基于浏览器的文档签名(带数字签名)的最佳跨浏览器解决方案是什么?

我需要实现一个基于浏览器的组件(很可能是 java 小程序,因为它需要跨浏览器),它允许我们对 XadES 格式的数据进行数字签名和验证。有哪些可用选项以及最佳解决方案是什么?

0 投票
7 回答
11992 浏览

java - 使用java加密整数

我正在尝试使用 java.security 和 javax.crypto 在 java 中加密一些整数。

问题似乎是 Cipher 类只加密字节数组。我不能直接将整数转换为字节字符串(或者我可以吗?)。做这个的最好方式是什么?

我应该将整数转换为字符串并将字符串转换为字节 [] 吗?这似乎太低效了。

有谁知道快速/简单或有效的方法?

请告诉我。

提前致谢。

吉布

0 投票
8 回答
15171 浏览

python - Python crypt 模块——盐的正确用法是什么?

首先,上下文:我正在尝试创建一个需要登录的基于命令行的工具(Linux)。此工具上的帐户与系统级帐户无关——这些都与 /etc/passwd 无关。

我计划使用与 /etc/passwd 相同的格式(大致)将用户帐户存储在文本文件中。

尽管不使用系统级密码文件,但与以明文形式存储密码相比,使用 crypt 似乎是一种很好的做法。(虽然 crypt 肯定比以明文形式存储密码更好,但我对其他方法持开放态度。)

我的地穴知识基于此: https ://docs.python.org/2/library/crypt.html

该文档似乎要求一些不可能的事情:“建议在检查密码时使用完整的加密密码作为盐。”

嗯?如果我正在创建加密密码(如创建用户记录时),我如何将加密密码用作盐?它还不存在。(我假设您必须使用相同的盐来创建和检查密码。)

我试过使用明文密码作为盐。这确实有效,但有两个问题;一种容易克服,一种严重:

1)明文密码的前两个字母包含在加密密码中。您可以通过不将前两个字符写入文件来解决此问题:

2)通过使用明文密码作为盐,您似乎正在减少系统中的熵量。可能我误解了盐的用途。

我能够得出的最佳实践是使用用户名中的前两个字符作为盐。这是合适的,还是我错过了什么使这成为一个糟糕的举动?

我对盐的理解是它可以防止从字典中预先计算密码哈希。我可以对所有密码使用标准盐(例如我的首字母“JS”),但这对于攻击者来说似乎比使用每个用户用户名中的两个字符要少。

0 投票
16 回答
38057 浏览

hash - 为什么 MD5 哈希值不可逆?

我一直想知道的一个概念是加密哈希函数和值的使用。我知道这些函数可以生成一个唯一且几乎不可能反转的哈希值,但这是我一直想知道的:

如果在我的服务器上,我会在 PHP 中生成:

当您通过 MD5 函数运行相同的字符串时,您会在 PHP 安装中得到相同的结果。一个过程被用来从一些初始值产生一些价值。

这是否意味着有某种方法可以解构正在发生的事情并反转哈希值?

这些函数是什么使生成的字符串无法回溯?

0 投票
3 回答
362 浏览

c++ - 使用 C++ 在 Mac 上使用智能卡对数据进行签名

Mac OS X 中是否支持使用智能卡对数据进行签名?我查看了系统头文件,发现只有对智能卡支持的模糊引用(在 SecKeychain.h 中),这并没有真正带我去任何地方。

如果没有内置支持,我的选择是什么(即存在哪些免费/非免费库可以帮助我)?