问题标签 [dsa]
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 - 使用 jar 文件中的代码时出现问题
我运行以下代码:
}
主要功能如下所示:
当我在 Eclipse 中运行它时一切顺利(输出为“true”),但是当我将它打包到一个 jar 中(没有 main 函数)并运行它时,输出为 false。
这就是我加载密钥的方式:
我检查并加载密钥工作正常。
任何想法 ?
security - 数字签名与 HMAC 与通过 DH 的密钥
我正在编写一个大量使用密码学的应用程序。与大多数网络应用程序一样,我的应用程序将数据分解为不同类型的消息(即时消息、文件块、视频帧等)——并且必须检查每个消息的真实性,以防篡改和正确的来源。到目前为止,我可以使用 ECDH 来协商我已经用于 AES 的共享密钥。当然,以后可以使用相同的共享密钥。
我的问题是:在这种情况下,使用 ECDSA 来签署每条消息,而不是简单地使用 ECDH 与 HMAC 建立的共享密钥,是否有任何额外的好处?
下面,当我说 M 时,我指的是加密消息或明文;没关系。请更正以下任何错误。
我知道在 ECDSA(或 DSA)中,通常M
使用安全散列算法(我目前正在使用 SHA-2 之一)对消息()进行散列H(M)
,然后H(M)
使用签名者的私钥对消息进行加密。这会产生R
和S
整数(签名)。然后,M、R 和 S 被发送给已经拥有发送者公钥的接收者。 H'(M)
计算,并使用R
和验证签名S
。BouncyCastle 提供了ECDSASigner
实现这一点的方法。
在 HMAC 中,我需要一个共享密钥。然后:(
HMAC(K, M) := H( f2(K) || H(f1(K) || M) )
感谢 Paŭlo Ebermann 的更正。有关详细信息,请参阅他的答案。)
那么,考虑到 DH/ECDH 安全地协商共享密钥,我是否有理由不使用 HMAC?
相关:为什么NSA为 DSA 而不是 MAC 指定标准算法?仅仅因为它可以是 SHA-2 + AES?
速度在这里很重要,因为我希望我正在制作的这个协议不仅现在支持文本消息,而且在不久的将来也支持大文件和视频帧。因此,我更喜欢使用 HMAC,但想确保我能达到上述目标。
谢谢你的帮助!
c - 使用 OpenSSL 进行 DSA 签名
我正在尝试使用来自 OpenSSL 的 DSA 进行签名。我有包含公钥和私钥的文件。
首先,我建立了单播连接,一切都很好。之后,我需要一个多播 UDP 连接,并且我想对数据包进行签名。我正在尝试使用函数PEM_read_DSA_PUBKEY()
从我的证书中加载我的公钥,但它不起作用。它总是返回NULL
而不是 DSA 结构。
在这里,您有一个简化版本的代码。我这样编译:
任何想法?谢谢!
java - 在没有密码库的情况下在 Java 中实现 DSA 的问题
您好,我有一个非常奇怪的问题,也许你们中的一些人可以帮助我。我正在用 Java 实现 DSA 签名算法,但除了从 java.security 生成 SHA-1 哈希函数外,我不能使用任何现有库来执行此操作。我的代码正在生成每个必需的数字,但验证签名时出现问题。这是我的代码:
我正在使用 generateR() 和 generateS(BigInteger r, byte[] data) 函数生成 R 和 S。数据是我的消息文本转换为字节。当我发送完全相同的字节数组并生成 S 和 R 来验证函数时,它返回 false。R 和 V 不相同,但它们应该相同。我做错了什么:)?? 我以这个c#代码为例: http ://www.koders.com/csharp/fidE9EF01A91C00DF066F023DD2EECA23856B922537.aspx?s=mdef%3Afile and description at Wikipedia http://en.wikipedia.org/wiki/Digital_Signature_Algorithm生成 K 的函数:
p>algorithm - 我应该如何格式化数字签名?
我正在实施 DSA 数字签名算法。我了解算法本身,但我不太了解的一件事是我的消息在签名后应该如何处理?
例如,我有一个文本文件,我想签署并发送给其他人。我应该把生成的用于验证签名的密钥放在哪里,我应该如何解析这个消息来验证签名?
java - SHA 哈希函数给出负输出
我正在尝试实现 DSA 签名算法,但我遇到了一个问题。我正在使用java.security
MessageDigest
该类,这是代码:
Text 是一个随机的 String 对象。问题是这段代码给了我哈希的负值,这是算法不接受的。难道我做错了什么?提前致谢。
PS 顺便说一句,我也尝试过不使用 BigIntegers 来实现 DSA,这可能吗?我没有找到小于 1024 和 160 的 L 和 N 值,所以我不知道应该取什么值以及应该使用什么散列函数。将非常感谢听到这些问题的答案。
digital-signature - 未能针对 python/m2crypto 中的 DSA 公钥验证 dsawithSha1 签名消息
- 我正在尝试使用持有 dsa 公钥的 x509 证书验证签名消息。x509 证书由 SAP 系统以 PKCS7 编码提供,在使用 openssl 在 PEM 中转换后,我能够读取内容(openssl x509 -in sapcert.pem -inform pem -text)它在 dsaEncryption 中保存一个公钥,显示我是 DSA 参数 y(pub)、p、q 和 g。
因为我没有在 M2Crypto x509 类中找到 DSA 实现,所以我尝试自己构建 DSA 公钥。为此我修补了 MyCrypto,(请参阅:如何在给定参数和密钥值的情况下创建 M2Crypto DSA 对象?),编译它并获得一个新函数 DSA.pub_key_from_params(p,q,g,y) 来构建我的 DSA 公钥使用证书中的参数。到此为止,一切正常。(单元测试虽然运行没有错误)。
在第二步中,我收到signedMessage(名为seckey)作为URL参数,在解码它(base64)后,我得到了一个正确的DER字符串,我可以用openssl(openssl ans1parse -in seckey -inform der)读取。在 openssl 的输出中,我可以看到已签名的 messageDigest,这正是我尝试验证的 SHA1 编码的 messagedigest(因此我可以确定已正确提供了 signedMessage)。虽然我可以看到一个 dsaWithSHA1 签名字符串,它似乎包含验证 dsa 签名消息所需的 r 和 s 值(请参阅:M2Crypto:验证 DSA 签名)
在这一点上,我坚持尝试验证signedMessage 几天了,我希望那里有一位密码专家可以帮助我。我尝试并搜索了很多,尝试了 pyCrypto lib,但都没有成功。
我试图将 SHA1 MessageDigest 以及 r 和 s 值传递给 M2Crypto.DSA.verify 函数,但由于它失败了,我想我要么必须传递 signedMessage 要么传递其中的一部分。(在一个 Java 论坛中,我发现了一些关于验证 SAP 提供的签名消息的帖子,还有一些关于通过“签名属性的 DER 编码”计算签名的文章。?)
这是我的示例代码:
有没有人知道如何进行正确的 dsawithsha1 签名验证?请帮忙!最好的问候,法尔科
cryptography - EC公钥是否有标准化的固定长度编码?
我想知道是否有(我希望有)ECDH(椭圆曲线 Diffie-Hellman)和 ECDSA(椭圆曲线数字签名算法)的公钥大小标准,适用于素数字段(192、224、256)上的每种曲线类型, 384 和 521)。
c++ - 在 C++ 中模拟确定性堆栈自动机 (DAS)
我正在阅读 UVA 的练习,我需要模拟确定性堆栈自动机,以查看 DSA 在给定条目上是否接受某些字符串,格式如下:
输入的第一行将是一个整数 C,表示测试用例的数量。每个测试用例的第一行包含五个整数 E、T、F、S 和 C,其中 E 表示自动机中的状态数,T 表示转换数,F 表示最终状态数,S 表示初始状态和C 分别为测试字符串的数量。下一行将包含 F 个整数,代表自动机的最终状态。然后是 T 行,每行有 2 个整数 I 和 J 以及 3 个字符串 L、T 和 A,其中 I 和 J (0 ≤ I, J < E) 分别表示过渡状态的起始状态和目的地状态。L 表示从磁带中读取的字符进入过渡,T 表示在堆栈顶部找到的符号,A 表示在此转换结束时使用堆栈顶部执行的操作(用于表示堆栈底部的字符始终为 Z。字符串,或unstack 不考虑栈顶的动作用于转换字符£)。堆栈的字母表将是大写字母。对于链 A,符号从右到左堆叠(与程序 JFlap 的方式相同,即栈的新顶部将是左侧的字符)。然后是 C 行,每行都有一个输入字符串。输入字符串可能包含小写字母和数字(不一定存在于任何转换中)。或 unstack 不考虑堆栈顶部的操作用于转换字符£)。堆栈的字母表将是大写字母。对于链 A,符号从右到左堆叠(与程序 JFlap 的方式相同,即栈的新顶部将是左侧的字符)。然后是 C 行,每行都有一个输入字符串。输入字符串可能包含小写字母和数字(不一定存在于任何转换中)。或 unstack 不考虑堆栈顶部的操作用于转换字符£)。堆栈的字母表将是大写字母。对于链 A,符号从右到左堆叠(与程序 JFlap 的方式相同,即栈的新顶部将是左侧的字符)。然后是 C 行,每行都有一个输入字符串。输入字符串可能包含小写字母和数字(不一定存在于任何转换中)。
每个测试用例第一行的输出必须显示以下字符串“Case G:”,其中 G 表示测试用例的数量(从 1 开始)。如果自动机接受字符串,则在 C 行上打印单词“OK”,否则打印“Reject”。
例如:
这是输出:
我需要一些帮助,或者知道如何模拟这个 DSA,我不是在问我解决问题的代码,因为我想制作自己的代码(这个想法是学习对吗??),但我需要一些帮助(一些想法或伪代码)开始实施。