问题标签 [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.
security - “双重哈希”密码是否比仅哈希一次更安全?
在存储之前对密码进行两次哈希处理是否比仅对密码进行一次哈希处理更安全或更安全?
我正在谈论的是这样做:
而不仅仅是这个:
如果它不太安全,你能提供一个很好的解释(或一个链接)吗?
另外,使用的散列函数有什么不同吗?如果您混合 md5 和 sha1(例如)而不是重复相同的哈希函数,会有什么不同吗?
注意 1:当我说“双重哈希”时,我指的是对密码进行两次哈希处理,以使其更加模糊。我不是在谈论解决冲突的技术。
注意 2:我知道我需要添加随机盐才能真正确保安全。问题是使用相同的算法进行两次散列是否有助于或损害散列。
c# - 加密许可证文件的有效方法?
对于 Web 应用程序,我想创建一个简单但有效的许可系统。在 C# 中,这有点困难,因为任何安装了 Reflector 的人都可以查看我的解密方法。
在 C# 中加密文件有哪些相当防篡改的方法?
cryptography - 如何使用 X509 证书(通过简单验证签署文件,+其他问题)
昨天我花了几个小时尝试使用 X509 证书(来自 thawte 的“免费邮件”证书之一)对一个短文件进行数字签名。我终于让 openssl 将其签名为 SMIME 消息,但我无法成功验证它,而且它采用 SMIME 格式——我无法访问实际上可以发送 SMIME 文件的“sendmail”程序。
我只想通过简单的剪切和粘贴创建一些“可摘录”的文件,例如:
或者,我想我可以制作一个包含原始文件和签名的 .zip 文件。
所以我想我的要求是:
- 输入明文 = 任意文件
- 输入signkey =来自X509证书
- 输出 = 我可以通过剪切和粘贴或附加单个 .zip 文件轻松地通过电子邮件发送给其他人的东西
- 程序 = 免费和开源的东西,例如 openssl 或 gpg
- 程序!=一个神奇的 GUI,我不明白发生了什么
- 能够轻松使用程序从输入中生成输出
- 能够轻松地从输出中提取明文(例如,直接通过眼睛或作为 .zip 文件的一个组件)
- 能够验证明文是否由 X509 证书的被授予者(即我)签署,并且证书的授予者 (CA) 是知名 CA……假设我是一个保持证书安全的理性人被其他方使用(否则有人可以像我一样签名)。
有没有关于 X509 证书的好教程以及它们在实践中如何用于这些东西?我有 Schneier 的“应用密码学”的第 2 版,并且在密码算法 + 协议方面有相当多的经验,但对 X509 知之甚少,我真的很困惑证书实际上是什么. (换句话说,“证书是颁发方 CA 的加密断言,即证书中指定的方 X 是 CA 已知的身份?”和“证书使其持有者能够_____”)
当我得到一个时,它会显示在 Firefox 的证书管理器的“您的证书”选项卡中,我可以将其导出并使用 openssl 读取它,但我想确保它不会以任何其他人可以使用的方式存储 w /o 知道证书。密码——我真的很困惑,因为似乎有些证书只有公钥,而其他证书有加密的私钥。
是否有一个围绕 openssl 的良好、简单的 GUI 包装器,可以让您解释它在做什么?
编辑: thawte 不容易让你直接使用证书请求;相反,它与 Web 浏览器(我使用 Firefox)对话,并生成私钥并处理所有证书协议。所以我可以将它导出为 PKCS12 文件,但我不确定如何使用它。
cryptography - 将 OpenSSL 公钥转换为 NSS 1
如何将 OpenSSL 生成的公钥转换为一个 NSS 可以理解的?我使用 OpenSSL 生成了密钥,将其导出为 pkcs12 格式,将其导入 NSS 数据库,然后使用 McCoy 实用程序提取公钥。这让我大吃一惊。这可能是编码的问题,但我应该使用哪一个?
更新:看起来 OpenSSL内部包含NSS 密钥,所以问题是 - 我如何找出 OpenSSL 密钥的哪一部分也是 NSS 密钥?
cryptography - 有人计划使用 Galois 的 Cryptol 吗?
我在 Dobb 博士 2008 年 12 月 29 日的电子邮件报告中看到,有一种用于设计加密系统的新 DSL(特定领域语言)。它被称为Cryptol,可从 Galois 获得。
有人看过吗?有人有使用它的计划吗?值得吗,你觉得呢?
罗伯特·甘布尔指出:
Cryptol 并不新鲜,它已经存在很多年了。新的是它(部分)对公众的可用性,它最初是为 NSA 开发和使用的。
就像布赖恩一样,我没有任何真正的理由使用 Cryptol。如果我需要(重新)验证我们拥有的基于 SSL 的实现,它可能会很有用,尽管我不确定它是否会有所帮助(我们不需要验证 SSL 库;我们可能需要验证我们的(错误)使用 SSL 库)。
security - 引脚生成
我正在寻求开发一个系统,我需要为每个用户分配一个唯一的密码以确保安全。用户只会输入此 PIN 码作为识别自己的一种方式。因此,我不希望用户能够猜测其他用户的密码。假设我将拥有的最大用户数是 100000,这个密码应该是多长时间?
例如 1234 4532 3423
我应该通过某种算法生成此代码吗?还是我应该随机生成它?
基本上我不希望人们能够猜测其他人的密码,它应该支持足够数量的用户。
很抱歉,如果我的问题听起来有点令人困惑,但很乐意澄清任何疑问。
非常感谢你。
更新
在阅读了下面的所有帖子之后,我想添加更多细节。
- 我想要实现的是与刮刮卡非常相似的东西。
- 给用户一张卡,他/她必须刮擦才能找到密码。
- 现在使用此密码,用户必须能够访问我的系统。
我无法添加额外的安全性(例如用户名和密码),因为它会阻止用户使用刮刮卡。我想让在限制范围内猜测密码变得尽可能困难。
再次感谢大家的精彩回复。
cryptography - 椭圆曲线上的点数
如果您有以下形式的椭圆曲线:
有没有一个好的程序来计算这条曲线上的点数?
我已阅读有关 Schoof 和 Schoof-Elkies-Atkin (SEA) 算法的信息,但我正在寻找开源实现。有谁知道可以做到这一点的好程序?
此外,如果 a 为 1,b 为 0,则无法使用 SEA 算法,因为 j 不变量为 0。这是正确的吗?
security - SSL 客户端如何验证服务器的证书?
我正在构建一个应用程序,并计划使用 OpenSSL 来保护数据传输。
我打算只让客户端验证服务器的证书。我对如何保护服务器证书感到困惑。我想加密包含私钥的服务器证书,但我不想为此加密使用任何硬编码密钥。
使用 SSL 的应用程序遵循哪些常见做法?
cryptography - 代码高尔夫:Diffie-Hellman 密钥交换
回到 ITAR 时代,有一个流行的 sig 执行 Diffie-Hellman 密钥交换:
使用现代直流,这可以大大减少为:
虽然具有模幂命令的现代 dc 形式('|' 通过有效的指数加倍计算 g^e % m )可能除了APL之外是无与伦比的,但可以改进原始形式吗?请记住,e 和 m 值将非常大;为了加密安全,它们都将是 1024 位的数量级。
hash - 密码盐如何帮助抵御彩虹表攻击?
我在理解密码盐的用途时遇到了一些麻烦。据我了解,主要用途是阻止彩虹表攻击。然而,我见过的实现这一点的方法似乎并没有真正让问题变得更难。
我看过许多教程建议将盐用作以下内容:
原因是哈希现在不是映射到原始密码,而是密码和盐的组合。但是说$salt=foo
and $password=bar
and $hash=3858f62230ac3c915f300c664312c63f
。现在有彩虹表的人可以反转哈希并提出输入“foobar”。然后他们可以尝试所有密码组合(f、fo、foo、... oobar、obar、bar、ar、ar)。获取密码可能需要几毫秒的时间,但其他时间不多。
我见过的另一个用途是在我的 linux 系统上。在 /etc/shadow 中,散列密码实际上与salt 一起存储。例如,“foo”的盐和“bar”的密码将散列为:$1$foo$te5SBM.7C25fFDu6bIRbX1
. 如果黑客能够以某种方式获得此文件,我看不出盐的用途,因为te5SBM.7C25fFDu6bIRbX
已知的反向哈希包含“foo”。
感谢任何人都可以对此有所了解。
编辑:感谢您的帮助。总结一下我的理解,盐使散列密码更加复杂,从而使其不太可能存在于预先计算的彩虹表中。我之前误解的是我假设所有哈希都存在彩虹表。