问题标签 [gost3410]

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 投票
1 回答
15086 浏览

openssl - 带有 GOST 引擎的 OpenSSL

我想使用 OpenSSL 生成私有/公共/(证书签名请求)并稍后签署一些数据。但我想使用OpenSSL GOST 引擎

我下载了 OpenSSL 1.0.0并修改了 openssl.cfg文件:

我可以生成私钥和 CSR(单行命令字符串):

我得到2个文件:

  • certificate_signing_request.csr
  • 私钥文件

我知道我可以做到(打印私钥和公钥的(未加密)文本表示):

我使用 GOST 而不是 RSA,这就是为什么我不能这样做:

我的问题是:如何使用 gost 生成/获取公钥(可能来自私钥或来自 csr)?

我用:

  • Windows 7 专业版 x64;
  • OpenSSL 1.0.0;
  • 戈斯特引擎

谢谢你的帮助。

0 投票
1 回答
1623 浏览

cryptography - OpenSSL gost 引擎问题

我正在尝试使用 OpenSSL 1.0.0d 实现 ECDH 密钥交换 GOST 34.10-2001。我正在像这样加载 gost 引擎:

此时 GOST 引擎已加载并且工作正常(我认为是这样)。我已经用散列和加密算法做了一些测试。

但是当我尝试实现 ECDH(通过导入另一方公钥生成共享密钥)时,我得到了不正确的结果(共享密钥与另一方不同)。

我检查了 a、b、p、q、x、y 参数,检查了代码流,但不知道出了什么问题。

有一件事:VKO 34.10-2001 算法在 openssl\engines\ccgost\gost2001_keyx.c (函数 VKO_compute_key)中实现,但是当我调用通用函数 ECDH_compute_key 时,它不会导致 VKO_compute_key(通过将 int3 设置为VKO_compute_key 的开头)。

我是不是误会了什么?或者有人可以展示一个使用来自openssl的gost引擎生成共享密钥的例子吗?

0 投票
1 回答
5204 浏览

security - OpenSSL 和 GOST 引擎问题(静态链接)

我对静态链接的 openSSL 库和 GOST 加密引擎有疑问。

我有使用 GOST 密钥和证书的简单客户端/服务器应用程序。它适用于 GOST 密钥,但前提是我使用 openSSL 库的动态链接版本。如果我尝试使用静态链接的 openSSL,我会收到一条错误消息。

这是 openSSL 库初始化调用:

OPENSSL_config("正确的配置文件路径");

SSL_library_init();

SSL_load_error_strings();

当我尝试读取证书文件时出现错误。

SSL_CTX_use_certificate_chain_file(ctx, CERTFILE)

这里的返回值不是 1。所以这是一个错误。

人类可读的错误消息是:

3084809868:error:0609E09C:digital envelope routines:PKEY_SET_TYPE:unsupported algorithm:p_lib.c:239:3084809868:error:0B07706F:x509 certificate routines:X509_PUBKEY_get:unsupported algorithm:x_pubkey.c:155:3084809868:error:140BF1CSSLroutines :SSL_SET_CERT:x509 lib:ssl_rsa.c:402:

当我将相同的代码与动态链接的 openSSL 库与外部 GOST 引擎库一起使用时,一切正常。那么静态版和动态版有什么区别呢?我此时唯一的想法是我的库初始化顺序是错误的。

我检查了编译后的 libcrypto.a 库中的符号。

纳米./libcrypto.a | grep

这个命令给了我很多 GOST 函数的输出,这些函数包含在 libcrypto.a 库中。因此,我认为该库已正确编译,并且所有 GOST 引擎功能都包含在静态库中。

“不支持的算法”错误消息意味着 GOST 函数未正确初始化。问题是:如何正确地使用静态链接的 openSSL 初始化引擎?

0 投票
1 回答
619 浏览

c - OpenSSL GOST 参数集

如果有办法以编程方式将自定义参数插入到 GOST 2001 参数集中,应该使用什么 API?在EVP_PKEY通过模拟 OpenSSLs 的函数生成后,我发现参数是绑定到 NID 的,所以需要在那里添加自定义的。任何人的想法?

0 投票
1 回答
4143 浏览

java - 生成 GOST 34.10-2001 密钥对并将其保存到某个密钥库

目前我需要为 GOST 34.10-2001 签名算法生成一个密钥对。很高兴发现充气城堡提供者支持此算法,但我无法生成密钥对并将其保存到任何类型的任何密钥库。keyalg目前我尝试了这个命令(如果isDSA和 sigalg is ,这个命令很好用SHA1withDSA):

但我有一个错误:

keysize当我尝试从命令中操作 keysize 或删除选项时,我可以看到完全相同的错误。但是有一些特殊情况。当我设置keysize256我有另一个错误:

目前我不知道如何生成密钥对以及如何将其保存到密钥库。此外,我还有一些可以为 GOST 34.10-2001 算法生成密钥对的 java 代码:

此代码示例使用ECGenParameterSpec类来初始化密钥对生成器,所以我应该以某种方式将它提供给 keytool(-providerArg provider_arg-Jjavaoption)吗?

PS 我认为我应该提供曲线名称作为一些参数,但我无法确定我应该使用什么参数。

0 投票
1 回答
3287 浏览

php - php、openssl 和 GOST

我正在尝试使用一对 GOST 加密证书和一个私钥使用 PHP 签署 S/MIME。

从控制台使用 openssl 本身时,一切都很好:

使用 PHP 代码时,我有点卡住了:

我得到:

'错误获取私钥'一直在这里,除了当它真的无法加载时,我得到'无起始行错误'。所以这个输出看起来真的像 PHP openssl 模块找不到合适的密码。

我如何告诉 PHP 这是一个 GOST 密码?我告诉openssl要么使用配置文件,要么使用直接'-engine gost'选项。有没有办法告诉 PHP 同样的事情?

我确实有一个 PHP 编译并链接到支持 GOST 的 openss 1.0.1e(openssl 模块是与 PHP 一起构建的):

(注意这是默认的配置输出)

0 投票
1 回答
700 浏览

java - 如何在 Java 客户端中启用 GOST 密码

我想在我的客户端密码列表中使用 GOST 密码时使用 Java 客户端与某些 Web 服务器建立 SSL 连接。我尝试使用以下方法检查 Java 中启用和支持的密码套件:getEnabledCipherSuites()并且getSupportedCipherSuites()没有返回 GOST 密码。如何使用 GOST 密码从我的 Java 客户端到 Web 服务器建立 SSL 连接?有什么方法可以指定我客户的密码列表以包含 GOST 密码?

0 投票
0 回答
3101 浏览

c - OpenSSL gost 引擎代码示例

任何人都可以帮助我使用 OpenSSL gost 引擎的示例。我必须使用 GOST R 34.10-2001 签名算法对数据进行签名,但找不到任何工作示例或文档。顺便说一句,如果我不打算使用该 OpenSSL 命令行实用程序,那么修改该 openssl.cnf 文件是否有任何意义?如果不是,我如何在代码中加载引擎?使用静态 gost 引擎构建 OpenSSL 需要哪些编译标志?提前致谢。

- - 解决方案 - -

最后,以下内容为我成功验证:

0 投票
1 回答
1412 浏览

java - 如何为 java.security.Provider 添加别名?

我需要验证 pdf 文件中的数字签名。
我使用itextpdfcryptopro

cryptopro为所需算法提供这些别名:

itextpdf尝试获取“GOST3411withECGOST3410”并失败:“没有这样的算法:提供者 JCP 的 GOST3411withECGOST3410”

这有效:

虽然不确定这是正确的方法。

0 投票
1 回答
118 浏览

java - 我怎样才能快速 ((A^z1 * y^z2) mod P) mod Q

BigIntegerValue.pow(IntegerValue)

java 上的指数是整数,但我有 Biginteger 值。

我曾尝试验证签名 GOST 3410,我得到了这个代码 pow,但它太长了..

有什么想法吗?要获得 P 和 Q,我使用充气城堡.. 但我不知道如何验证充气城堡,因为不知道如何查看价值.. 谢谢。