gpt4 book ai didi

ruby - 在 Ruby 中使用 OpenSSL 进行 GOST 数字签名验证

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:57 29 4
gpt4 key购买 nike

我有我的证书、源文档、Base64 格式的分离签名。由 UEC(通用电子卡 - 俄罗斯智能卡项目)在 Windows 上的 CryptoARM 程序中创建的签名(我认为 GOST hash function is used)。

我正在使用 Ubuntu 13.10 并安装了 OpenSSL 1.0.1e(默认情况下包含 GOST 支持 AFAIK)。

我已经在 Ubuntu CA 商店中安装了 UEC CA 证书:

sudo cp ~/uec/uec.cer /usr/local/share/ca-certificates/uec.crt
sudo update-ca-certificates

并且控制台验证成功(确定文件是否未更改):

$ openssl smime -verify -engine gost -inform DER -in ~/uec/to_be.txt.sig -content ~/uec/to_be.txt 
engine "gost" set.
Verification successful
Original file contents goes here

因此,我正尝试在 Ruby(2.0.0 和 2.1.0)中进行验证,如以下问题所述:Digital signature verification with OpenSSL

require 'openssl'
OpenSSL::Engine.load
engine = OpenSSL::Engine.by_id('gost')

cert_store = OpenSSL::X509::Store.new
cert_store.set_default_paths
my_cert = File.read('/home/envek/uec/envek-b64.cer')
data = File.read('/home/envek/uec/to_be.txt')
signature = OpenSSL::PKCS7.new(File.read('/home/envek/uec/to_be.txt.der.sig'))

signature.verify([my_cert], cert_store, data, OpenSSL::PKCS7::DETACHED || OpenSSL::PKCS7::NOVERIFY)
# => false
signature
# => #<OpenSSL::PKCS7:0x00000002168918 @data="\xEF\xBB\xBF\xD0\xAD\xD1\x82\xD0\xBE \xD1\x84\xD0\xB0\xD0\xB9\xD0\xBB, \xD0\xBA\xD0\xBE\xD1\x82\xD0\xBE\xD1\x80\xD1\x8B\xD0\xB9 \xD1\x8F \xD0\xBF\xD0\xBE\xD0\xB4\xD0\xBF\xD0\xB8\xD1\x88\xD1\x83", @error_string="unsupported algorithm">

所以,我真的不知道为什么它只返回 false,我的引擎加载是否有影响。如何说 PKCS7#verify 使用正确的算法,由 GOST 引擎提供?

有什么想法吗?

文件:

附言要使 OpenSSL 正常工作,需要执行后续步骤(找到 here):

这个字符串应该添加到/etc/ssl/openssl.cnf的最顶部

openssl_conf = openssl_def

这些字符串应该添加到/etc/ssl/openssl.cnf的最底部

[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
default_algorithms = ALL
engine_id = gost

在下一个命令之后应该显示下一个输出:

$ openssl ciphers | tr ":" "\n" | grep GOST
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

最佳答案

奇怪的是,我刚刚尝试用 0xFFFF 的值调用 OpenSSL::Engine#set_default 方法。只是:

engine.set_default(0xFFFF)

而且有效!!!

Documentation对此绝对不清楚。它做什么,它接收什么标志作为值?请任何人向我解释一下。

关于ruby - 在 Ruby 中使用 OpenSSL 进行 GOST 数字签名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070936/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com