标签: dsa

C中的DSA签名验证与控制台中的签名验证不匹配。的OpenSSL

我写了一个代码来对一条消息进行签名,该消息显然运行良好,它可以使用DSA私钥(512位)对消息进行签名,然后稍后使用相应的公钥对其进行验证(这里没有问题)。我正在使用Windows 7。

但,

如果要在控制台中验证标志,则openssl命令始终返回:验证失败。

#include <stdio.h>
#include <string.h>
#include <openssl\dsa.h>
#include <openssl\engine.h>
#include <openssl\pem.h>

int main(){
    char privkey[] = {
        "-----BEGIN DSA PRIVATE KEY-----\n"
        "MIH4AgEAAkEA3F41fxvcwGZeFxXg2v0/5SR+cxTizT25QugwZgrC7u2zQYTO1Qu0\n"
        "PPDKUrLxkaLzKsUEJbQ1DImnG/FxtRjH7QIVAOp+o1qPhOI4DtnvYS86ynTxhDcF\n"
        "AkAyKbiUxJigARuuVVlGn4emXOtrT+Al+gmKbbVFfkS62RhSZexQ9+mBLv0/1R8T\n"
        "k37AwuybnflijiPjLxB1ZL00AkA2DXjw+0PJOyrQfn2Q44uHyZMG2WfXqT7CIz26\n"
        "ZiIAHDOkZQhOvPLqCKAXfwHgGrgl2JLovhVY8nPMdNk2vJijAhUAzK9TuVobhOE8\n"
        "kU0xl8lqaI/PMyg=\n"
        "-----END DSA PRIVATE KEY-----"
        };

    char pubkey[] = {
        "-----BEGIN PUBLIC KEY-----\n"
        "MIHwMIGoBgcqhkjOOAQBMIGcAkEA3F41fxvcwGZeFxXg2v0/5SR+cxTizT25Qugw\n"
        "ZgrC7u2zQYTO1Qu0PPDKUrLxkaLzKsUEJbQ1DImnG/FxtRjH7QIVAOp+o1qPhOI4\n"
        "DtnvYS86ynTxhDcFAkAyKbiUxJigARuuVVlGn4emXOtrT+Al+gmKbbVFfkS62RhS\n"
        "ZexQ9+mBLv0/1R8Tk37AwuybnflijiPjLxB1ZL00A0MAAkA2DXjw+0PJOyrQfn2Q\n"
        "44uHyZMG2WfXqT7CIz26ZiIAHDOkZQhOvPLqCKAXfwHgGrgl2JLovhVY8nPMdNk2\n"
        "vJij\n"
        "-----END PUBLIC KEY-----"
        };

    char message[] = {"Hello World!"};

    //save message for console test
    FILE *message_file = fopen ("message.txt","w");
    fwrite(message, strlen(message), 1, message_file);
    fclose(message_file);

    //save private key for console test
    FILE *privkey_file …
Run Code Online (Sandbox Code Playgroud)

c console openssl sign dsa

5
推荐指数
1
解决办法
1489
查看次数

OpenSSL字节序列是小端还是大端序?

我正在尝试使用openssl dsa实现,但我对以下细节非常困惑:

  • 命令的选项'-text' openssl dsa ....:输出中的十六进制数字,我是否正确假设那些是字节,因此它们是小端序?

  • 功能BN_bn2hex和BN_hex2bn,他们使用什么Endianess?

在此先感谢您的帮助.

openssl endianness dsa

4
推荐指数
1
解决办法
3867
查看次数

DSA验证计算

我错过了什么吗?从第25页的FIPS180-2开始,它给出了u1,u2,g ^ u1 mod p,y ^ u2 mod p和v的值.我计算了除了v之外的所有值.但是,当我做数学时,我的计算拒绝为v = 0x8bac1ab66410435cb7181f95b16ab97c92b341c0.相反,我从之前得到v = 0xc5a54698ae8e5b94661134260594ff4e3f488e26,它不等于r.我正在(pow(g, u1, p) * pow(y, u2, p)) % q做计算,pow内置函数在哪里,而不是数学模块函数

python math cryptography dsa

3
推荐指数
1
解决办法
544
查看次数

使用openssl生成DSA密钥对

我想使用C生成一个私钥和公钥,以便在身份验证过程中使用它们。

您能给我一个基本的例子,用C生成密钥吗?

我发现了这些功能,但我不知道如何使用它们:

DSA * DSA_generate_parameters(int bits, 
                              unsigned char *seed,
                              int seed_len,
                              int *counter_ret, 
                              unsigned long *h_ret,
                              void (*callback)(int, int, void *), 
                              void *cb_arg);

int DSA_generate_key(DSA *dsa);
Run Code Online (Sandbox Code Playgroud)

请帮帮我!

谢谢!:)

c c++ openssl cryptography dsa

3
推荐指数
1
解决办法
3903
查看次数

BigInteger 用 BigInteger 取幂:ArithmeticException,会溢出支持的范围

我正在构建 DSA 算法。但是我在将 BigInteger 数字与其他 BigInteger 数字进行排名时遇到了问题。这是我想使用的公式:

v = ((g^u1 * y^u2) mod p) mod q

这是我制作的代码:

BigInteger v = g.pow(u1.intValue()).multiply(y.pow(u2.intValue())).mod(p).mod(q);

运行脚本时,错误是:

Exception in thread "main" java.lang.ArithmeticException: BigInteger would overflow supported range
        at java.math.BigInteger.reportOverflow(Unknown Source)
        at java.math.BigInteger.pow(Unknown Source)
        at DSAVerifying.main(DSAVerifying.java:38)
Run Code Online (Sandbox Code Playgroud)

java exponentiation dsa

3
推荐指数
1
解决办法
64
查看次数

数字签名算法的工作实例

有没有人有一个DSA工作示例,其中包含有关如何计算r,s和验证v == r的简单值.由于这个标准已经存在了一段时间并且在图书馆中实现,例如Java Cryptography Extension,我发现很难找到算法如何工作的例子.

Compute r=(gk mod p) mod q 
Compute s=(k-1 * (x * r + i)) mod q 
Verifying a signature; again i is the input, and (r,s) is the signature. 

u1 = (s-1 * i) mod q 
u2 = (s-1 * r) mod q 
v = ((gu1 * yu2) mod p) mod q 
If v equals r, the signature is valid.
Run Code Online (Sandbox Code Playgroud)

谢谢,

cryptography dss dsa

2
推荐指数
1
解决办法
6750
查看次数

C#为DSA加密算法生成公钥和私钥

如何以字节数组格式生成DSA算法的公钥和私钥?

c# encryption public-key-encryption dsa

2
推荐指数
1
解决办法
2605
查看次数

如何生成有效的ECDSA EC密钥对?

我正在尝试使用Android中的SpongyCastle生成ECDSA密钥对。这是代码:

static {
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}

public static KeyPair generate() {
        ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime256v1");
        KeyPairGenerator generator = KeyPairGenerator.getInstance("ECDSA", "SC");
        generator.initialize(ecSpec, new SecureRandom());
        KeyPair keyPair = g.generateKeyPair();
        Log.i(TAG, "EC Pub Key generated: " + utils.bytesToHex(keyPair.getPublic().getEncoded()));
        Log.i(TAG, "EC Private Key generated: " + utils.bytesToHex(keyPair.getPrivate().getEncoded()));            
       return generator.generateKeyPair();
}
Run Code Online (Sandbox Code Playgroud)

出现错误是因为我总是得到类似公钥的示例:

3059301306072A8648CE3D020106082A8648CE3D03010703420004483ABA9F322240010ECF00E818C041A60FE71A2BD64C64CD5A60519985F110AEDE6308027D2730303F5E2478F083C7F5BB683DCAC22BFEB62F3A48BD01009F40

和私钥:

308193020100301306072A8648CE3D020106082A8648CE3D030107047930770201010420219AB4B3701630973A4B2917D53F69A4BE6DAD61F48016BFEF147B2999575CB2A00A06082A8648CE3D030107A14403420004483ABA9F322240010ECF00E818C041A60FE71A2BD64C64CD5A60519985F110AEDE6308027D2730303F5E2478F083C7F5BB683DCAC22BFEB62F3A48BD01009F40

站点ECDSA样本给了我“无效的ECDSA签名消息”,它们似乎与那个较小的私有密钥有很大不同,并且总是以在同一站点中生成的“ 04”公共密钥开头。

另外,我的后端验证给我错误“无效点编码0x30”

后端Java方法检查为:

public ECPublicKey getPublicKeyFromHex(String publicKeyHex)
        throws NoSuchAlgorithmException, DecoderException, ApplicationGenericException {
    byte[] rawPublicKey = Hex.decodeHex(publicKeyHex.toCharArray());
    ECPublicKey ecPublicKey = null;
    KeyFactory kf = null;

    ECNamedCurveParameterSpec ecNamedCurveParameterSpec …
Run Code Online (Sandbox Code Playgroud)

bouncycastle elliptic-curve dsa ecdsa spongycastle

2
推荐指数
1
解决办法
4362
查看次数

数字签名算法的数学攻击

有没有人知道DSA攻击背后的数学,其中模数p的p-1只由很小的因子组成.实际上,这不会发生,因为密钥生成器会保证不是这样.

关于为DSA生成良好的输入参数的网上有很多信息,因此很难破解,但如果模数p只有很小的因素,p-1就没有关于如何找到X的信息.

math cryptography dss dsa

1
推荐指数
1
解决办法
640
查看次数

Openssl生成公共非对称密钥

我试图从OpenSSL CLI输出公共EC密钥参数Qx和Qy.这可能吗?

ssl openssl rsa dsa ecdsa

0
推荐指数
1
解决办法
483
查看次数