- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚收到我的 Covid Green Pass。我已经开始对其进行解码,这是我得到的字段:
header: a20448349a42b0c2d0728e0126
payload: a4041a645d8180061a61053b9501624954390103a101a4617681aa62646e01626d616d4f52472d3130303033313138346276706a313131393334393030376264746a323032312d30372d313462636f624954626369782630314954303544314444
signature: 6f422bd436e216177de025d3d31681a27bead6115f480630754db6f1498bbc782cdc975f4c4d79af77dbe02c31de6af4ba94d7fe11510a5ca6121cb0bf10890a
本例中所有字段均为十六进制。有效载荷是一个 CBOR 结构,它可以被进一步解码以获取您的数据。
我现在想做的是使用 Unix 工具 openssl
验证签名。我发现绿色通行证签名是使用椭圆曲线数字签名算法 (ECDSA) 创建的,使用 P–256 参数,结合 SHA–256 哈希算法。
使用 openssl
,我应该能够验证这个 greenpass:
$ openssl dgst -sha256 -verify public_key_it -signature my_signature my_data
我需要三个参数:public_key_it
、my_signature
和 my_data
。
public_key_it
是一个文件,包含能够检查绿色通行证签名的公钥。它可在线获取,对于意大利,它是:-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnL9+WnIp9fvbcocZSGUFlSw9ffW/jbMONzcvm1X4c+pXOPEs7C4/83+PxS8Swea2hgm/tKt4PI0z8wgnIehojw==
-----END PUBLIC KEY-----
my_signature
是包含绿色通行证签名部分的文件。我得到它:echo "6f422bd436e216177de025d3d31681a27bead6115f480630754db6f1498bbc782cdc975f4c4d79af77dbe02c31de6af4ba94d7fe11510a5ca6121cb0bf10890a" | xxd -r -p > my_signature
my_data
部分比较神秘。它似乎它应该是一个 Sig_structure
,如 https://datatracker.ietf.org/doc/html/rfc8152#section-4.4 中指定的那样.无论如何,我尝试编写它:jSignature1MH4Br&@Y7d]a;bIT9avbdnbmamORG-100031184bvpj1119349007bdtj2021-07-14bcobITbcix&01IT05D1DDD951474B1C93D161A4F4663B8E#3bmplEU/1/20/1507bisvMinistero della Salutebsdbtgi840539006cnamcfntfDUPONTbfnfDUPONTcgntxCORENTIN<NICOLAS<MARIE<FRANCOISbgnx"CORENTIN, NICOLAS, MARIE, FRANCOIScvere1.0.0cdobj1978-11-17
有些字符是不可打印的,所以这里又是十六进制的:
846a5369676e6174757265314da20448349a42b0c2d0728e012640590137a4041a645d8180061a61053b9501624954390103a101a4617681aa62646e01626d616d4f52472d3130303033313138346276706a313131393334393030376264746a323032312d30372d313462636f62495462636978263031495430354431444444393531343734423143393344313631413446343636334238452333626d706c45552f312f32302f31353037626973764d696e69737465726f2064656c6c612053616c7574656273640162746769383430353339303036636e616da463666e74664455504f4e5462666e664455504f4e5463676e74781f434f52454e54494e3c4e49434f4c41533c4d415249453c4652414e434f495362676e7822434f52454e54494e2c204e49434f4c41532c204d415249452c204652414e434f49536376657265312e302e3063646f626a313937382d31312d3137
好吧,如果我尝试上面的 openssl 命令,我会得到:
$ openssl dgst -sha256 -verify public_key_it -signature my_signature my_data
Error Verifying Data
140529059103168:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:../crypto/asn1/asn1_lib.c:91:
140529059103168:error:0D068066:asn1 encoding routines:asn1_check_tlen:bad object header:../crypto/asn1/tasn_dec.c:1137:
140529059103168:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:309:Type=ECDSA_SIG
有什么提示吗?我什至在正确的轨道上?谢谢
编辑:我现在解决了这个问题。我在博客文章中写了所有细节:http://www.corentindupont.info/blog/posts/Programming/2021-08-13-GreenPass.html
最佳答案
在@MichaelFehr 的帮助下,我设法解决了这个问题!
GreenPass 具有“原始”(P1363) 格式的签名。但是,openssl
只接受 DER 格式。所以我们需要转换它。
这是我的签名:
6f422bd436e216177de025d3d31681a27bead6115f480630754db6f1498bbc782cdc975f4c4d79af77dbe02c31de6af4ba94d7fe11510a5ca6121cb0bf10890a
它有 64 个字节长。它由两个整数 R 和 S 组成。R是前半部分,S是后半部分。
R = 6f422bd436e216177de025d3d31681a27bead6115f480630754db6f1498bbc78
S = 2cdc975f4c4d79af77dbe02c31de6af4ba94d7fe11510a5ca6121cb0bf10890a
根据DER编码,我需要增加一些字节:
30 -- fixed value for composed structure
44 -- size of everything that follows
02 -- fixed value for integer
20 -- size of the R integer
6f422bd436e216177de025d3d31681a27bead6115f480630754db6f1498bbc78 -- R
02 -- fixed value for integer
20 -- size of the S integer
2cdc975f4c4d79af77dbe02c31de6af4ba94d7fe11510a5ca6121cb0bf10890a -- S
如果我组装它,我可以获得我的 DER 签名:
echo -n "304402206f422bd436e216177de025d3d31681a27bead6115f480630754db6f1498bbc7802202cdc975f4c4d79af77dbe02c31de6af4ba94d7fe11510a5ca6121cb0bf10890a" | xxd -r -p > my_signature.der
数据部分也需要组合。根据COSE spec ,我需要从绿色 channel 数据构建一个“Sig_structure”。此 Sig_structure 用于创建签名和验证签名。
这里是完成的“Sig_structure”:
846a5369676e6174757265314d -- "Signature1" in hexadecimals
a20448349a42b0c2d0728e0126 -- My header (see original post above)
40590137 -- some separator... not sure
a4041a645d8180061a61053b9501624954390103a101a4617681aa62646e01626d616d4f52472d3130303033313138346276706a313131393334393030376264746a323032312d30372d313462636f62495462636978263031495430354431444444393531343734423143393344313631413446343636334238452333626d706c45552f312f32302f31353037626973764d696e69737465726f2064656c6c612053616c7574656273640162746769383430353339303036636e616da463666e74664455504f4e5462666e664455504f4e5463676e74781f434f52454e54494e3c4e49434f4c41533c4d415249453c4652414e434f495362676e7822434f52454e54494e2c204e49434f4c41532c204d415249452c204652414e434f49536376657265312e302e3063646f626a313937382d31312d3137 -- my payload (see above)
我们现在可以创建my_data
:
echo -n "846a536967..." | xxd -r -p > my_data.bin
现在可以了!!
$ openssl dgst -sha256 -verify public_key_it -signature my_signature.der my_data
Verified OK
关于unix - 使用 openSSL 验证 EU GreenPass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68941589/
本文整理了Java中eu.infomas.annotation.ZipFileIterator类的一些代码示例,展示了ZipFileIterator类的具体用法。这些代码示例主要来源于Github/S
我是 Java 的新手,我正在尝试弄清楚如何计算给定字符串中的字符数并威胁两个字符 "eu" 的组合作为一个单个字符,并且仍然将所有其他字符计为一个字符。 我想使用递归来做到这一点。 考虑以下示例。
有没有办法指定将部署我的 Firebase 功能的区域/区域。 实际上,我在文档中没有找到任何相关信息,我的功能始终部署到 us-central1,但我想将它放在 eu-central1 上... 是
我在某处读到,x86 指令中的有效地址(如 LEA 指令)是由“EU”计算的。欧盟是什么?计算有效地址到底涉及什么? 我只了解了MC68k指令集(UC Boulder先教这个),在网上搜索也找不到好的
我想知道一些搜索网站如何获取其内容。我在标题中使用了“torrentz.eu”的示例,因为它包含来自多个来源的内容。我想知道这个系统的背后是什么;他们是否“简单地”解析他们支持的所有网站,然后显示内容
我正在尝试从 Nashorn 执行的 JavaScript 调用类的静态方法: var hooks = new JavaImporter(eu.wansdyke.carbon.hooks);with
本文整理了Java中eu.infomas.annotation.ZipFileIterator.getEntry()方法的一些代码示例,展示了ZipFileIterator.getEntry()的具体
本文整理了Java中eu.infomas.annotation.ZipFileIterator.accept()方法的一些代码示例,展示了ZipFileIterator.accept()的具体用法。这
本文整理了Java中eu.infomas.annotation.ZipFileIterator.next()方法的一些代码示例,展示了ZipFileIterator.next()的具体用法。这些代码示
本文整理了Java中eu.infomas.annotation.ZipFileIterator.()方法的一些代码示例,展示了ZipFileIterator.()的具体用法。这些代码示例主要来源于Gi
我刚刚收到我的 Covid Green Pass。我已经开始对其进行解码,这是我得到的字段: header: a20448349a42b0c2d0728e0126 payload: a4041a645
我正在使用 Mail 和 Mailgun 从 Laravel (5.8) 发送电子邮件。 向沙箱发送电子邮件时没有问题,但是在生产中我无法从我的域中发送电子邮件。我基本上已经确定这是由于欧盟端点,但是
我有一个 iOS 应用程序已提交到应用程序商店,出于商业原因,我们不希望很快有另一个版本。此 iOS 应用程序指的是位于 myapp.herokuapp.com 的服务器 iOS 应用程序的所有用户都
我正在使用 Pusher Javascript library创建一个实时网络应用程序。一切都像一个魅力,但是当我设置 cluster eu 的参数(我的用户将仅从法国连接),我得到一个错误。 这是我
我有这个 json: "rates": { "AT": { "country": "Austria", "standard_rate":
也许有人可以帮助我使用 overpass-turbo.eu-query。 我想突出显示(中心)一个国家或地区(或当前 map )的所有城市。 网上可能有一个“简单”的例子吗? (Google 还不是这
我将 GDPR 代码添加到我的应用程序中,但它崩溃了。 这是我的功能: private void loadGPDR() { ConsentInformation consentInfo
我想将 jvectormap world_mill map 的中心从欧盟更改为亚洲。有可能的?如果不是,我如何创建以亚洲为中心的自定义世界地图? 最佳答案 经度是用于表示东点或西点相对于格林威治子午线
这是我所拥有的: 一个 java 应用程序(作为 JAR 文件) 带有此 Java 应用程序的 docker 镜像(由 Dockerfile 构建) 该图像是使用以下内容构建的:sudo docker
如果这是转帖,请见谅。在发布此内容之前,我确实进行了搜索(没有运气)。 如果有任何错误,“bash -e”将出错/失败。它不包括“bash -u”条件吗?如果未设置参数,使用该参数的命令不会失败并被“
我是一名优秀的程序员,十分优秀!