问题标签 [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.
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;
- 戈斯特引擎。
谢谢你的帮助。
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引擎生成共享密钥的例子吗?
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 初始化引擎?
c - OpenSSL GOST 参数集
如果有办法以编程方式将自定义参数插入到 GOST 2001 参数集中,应该使用什么 API?在EVP_PKEY
通过模拟 OpenSSLs 的函数生成后,我发现参数是绑定到 NID 的,所以需要在那里添加自定义的。任何人的想法?
java - 生成 GOST 34.10-2001 密钥对并将其保存到某个密钥库
目前我需要为 GOST 34.10-2001 签名算法生成一个密钥对。很高兴发现充气城堡提供者支持此算法,但我无法生成密钥对并将其保存到任何类型的任何密钥库。keyalg
目前我尝试了这个命令(如果isDSA
和 sigalg is ,这个命令很好用SHA1withDSA
):
但我有一个错误:
keysize
当我尝试从命令中操作 keysize 或删除选项时,我可以看到完全相同的错误。但是有一些特殊情况。当我设置keysize
为256
我有另一个错误:
目前我不知道如何生成密钥对以及如何将其保存到密钥库。此外,我还有一些可以为 GOST 34.10-2001 算法生成密钥对的 java 代码:
此代码示例使用ECGenParameterSpec
类来初始化密钥对生成器,所以我应该以某种方式将它提供给 keytool(-providerArg provider_arg
或-Jjavaoption
)吗?
PS 我认为我应该提供曲线名称作为一些参数,但我无法确定我应该使用什么参数。
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 一起构建的):
(注意这是默认的配置输出)
java - 如何在 Java 客户端中启用 GOST 密码
我想在我的客户端密码列表中使用 GOST 密码时使用 Java 客户端与某些 Web 服务器建立 SSL 连接。我尝试使用以下方法检查 Java 中启用和支持的密码套件:getEnabledCipherSuites()
并且getSupportedCipherSuites()
没有返回 GOST 密码。如何使用 GOST 密码从我的 Java 客户端到 Web 服务器建立 SSL 连接?有什么方法可以指定我客户的密码列表以包含 GOST 密码?
c - OpenSSL gost 引擎代码示例
任何人都可以帮助我使用 OpenSSL gost 引擎的示例。我必须使用 GOST R 34.10-2001 签名算法对数据进行签名,但找不到任何工作示例或文档。顺便说一句,如果我不打算使用该 OpenSSL 命令行实用程序,那么修改该 openssl.cnf 文件是否有任何意义?如果不是,我如何在代码中加载引擎?使用静态 gost 引擎构建 OpenSSL 需要哪些编译标志?提前致谢。
- - 解决方案 - -
最后,以下内容为我成功验证:
java - 如何为 java.security.Provider 添加别名?
我需要验证 pdf 文件中的数字签名。
我使用itextpdf
和cryptopro
cryptopro
为所需算法提供这些别名:
itextpdf
尝试获取“GOST3411withECGOST3410”并失败:“没有这样的算法:提供者 JCP 的 GOST3411withECGOST3410”
这有效:
虽然不确定这是正确的方法。
java - 我怎样才能快速 ((A^z1 * y^z2) mod P) mod Q
BigIntegerValue.pow(IntegerValue)
java 上的指数是整数,但我有 Biginteger 值。
我曾尝试验证签名 GOST 3410,我得到了这个代码 pow,但它太长了..
有什么想法吗?要获得 P 和 Q,我使用充气城堡.. 但我不知道如何验证充气城堡,因为不知道如何查看价值.. 谢谢。