验证充气城堡上的 javacard 签名 ALG_ECDSA_SHA

2023-12-02

我的问题如下所示:我在 javaCard (jcdk 2.2.2) 上生成签名,当我想使用 BouncyCastle 在终端上验证它时,签名并不总是经过验证 - 3,66 中的 1(100 次尝试的平均值)签名是验证完毕,其余返回 false。当我验证卡上的签名时,它总是返回 true,但在终端上它通常返回 false,但有时返回 true。因为终端有时会给出肯定的答案,我认为代码没问题,原因是在其他地方,但我可能是错的。

在javacard上我使用Signature.ALG_ECDSA_SHA,并在终端Signature.getInstance(“SHA1withECDSA”,“BC”)上我也尝试了SHA1withDetECDSA,但我的行为类似。

请帮忙。


问题在于 JavaCard 和 BouncyCastle 使用不同格式的生成签名。例如,对于 Prime192v1 曲线,生成的 JavaCard 签名始终为 56 字节长,但 Bouncy Castle 签名有时更短,因为它省略了 EC 点坐标中的前导零。

JavaCard 签名(同样适用于 Prime192v1)的十六进制格式如下所示:

30 36 02 19 [25 bytes of the first coord] 02 19 [25 bytes of the second coord]

(它是 DER 编码结构:两个 INTEGER 的 SEQUENCE)

然而,BouncyCastle 预计 EC 坐标中不会出现这些零。所以你必须删除它们并修复 DER 结构,例如

30 36 02 19 **00 00** [the rest 23 bytes of the first coord] 02 19 **00** [24 bytes of the second coord]

Bouncy Castle 必须将 JavaCard 转换为:

30 **33** 02 **17** [23 bytes of the first coord] 02 **18** [24 bytes of the second coord]

有时您正确验证签名的原因很简单:有时 JavaCard 签名坐标中没有前导零。

编辑:受到 TajnosAgentos 观察的启发:

BouncyCastle 将坐标编码为有符号整数,JavaCard 始终将坐标编码为无符号整数。这就是为什么只要第一个字节的最高有效位为 1,BouncyCastle 就会添加一个特殊的前导零(尽管它会修剪其他前导零),因为坐标始终是正数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证充气城堡上的 javacard 签名 ALG_ECDSA_SHA 的相关文章

随机推荐

  • java手机通用签名工具

    谁能告诉我几乎所有java移动供应商 如三星 索尼 诺基亚 Micromax Moto等 使用的常用签名工具是什么 AFAIK Thawte Verisign and Java验证支持大多数设备 但一切都是成本 有一次我为此与 Thawte
  • Python + Django 页面重定向

    如何完成简单的重定向 例如cflocation在 ColdFusion 中 或header location http 对于 PHP 在 Django 中 这很简单 from django http import HttpResponseR
  • 寻找最佳报价组合的算法,该组合可以为给定的一组商品提供最大折扣

    我有带有 ID 的物品 1001 1002 1003 1004 1005 1006 There respective quantities are 2 5 1 1 5 2 现在我有如下数据 每行都有一个 OfferId offerId It
  • PHP 中如何将日期转换为时间戳?

    我如何从例如获取时间戳22 09 2008 此方法适用于bothWindows 和 Unixand is 时区意识到 如果你和你一起工作 这可能就是你想要的dates 如果您不关心时区 或者想使用服务器使用的时区 d DateTime cr
  • 如何使用 bookshelf-pagemaker 添加简单的Where子句

    使用书架页面制作器NodeJS 模块 https www npmjs com package bookshelf pagemaker https github com bhoriuchi bookshelf pagemaker 我能够获得基
  • 如何在Opengl中裁剪网格的这一部分?

    I tried to clip mesh in openGl and i think that i have a problem with math I have a cube 例如 我需要剪辑该立方体的一半 所以我不明白如何计算这个裁剪平
  • Angular 2 中同一根应用程序的多个实例

    我们将 Angular 2 集成到旧页面中 使功能逐渐变得更加用户友好 到目前为止 将预渲染的后端小部件替换为角度模块效果非常好 然而 我遇到了一个我不知道如何解决的问题 我编写了一个模块 组件 它可以在页面上的不同位置和不同的配置中多次出
  • ARC 已启用,但存在内存泄漏(目标 C)

    正如您所看到的 下面的代码除了枚举一组文件之外并没有做太多事情 全部注释掉 但是 在运行下面的函数 40 秒后 我的内存使用量增长到超过 2 GB 该函数是通过按用户界面上的按钮 我可以运行 UI 几个小时 在按下按钮之前 内存使用量不超过
  • 是否可以在 Scala 中对提取器(不应用)的参数使用隐式转换?

    我创建了一个名为 CaseInsensitive 的类 它包装一个字符串 请参阅在 Scala 中实现不区分大小写比较的字符串类 我创建了一个 case 类 它有一个 CaseInsensitive 类型的成员变量 因此它有一个默认的 un
  • 如何使 Boost.Spirit.Lex 标记值成为匹配序列的子字符串(最好通过正则表达式匹配组)

    我正在编写一个简单的表达式解析器 它建立在基于 Boost Spirit Lex 标记的 Boost Spirit Qi 语法之上 版本 1 56 中为 Boost 令牌定义如下 using namespace boost spirit t
  • 如何获取 pandas DataFrame 中具有无效 np.datetime64 日期的所有行

    我有一个 pandas DataFrame 其中有一列 date col 其中包含日期字符串 我想过滤 DataFrame 中此列中的日期字符串将抛出的所有行ValueError如果解析为numpy datetime64 我正在寻找类似的东
  • Swift 3:Int 不能按位运算转换为 Bool

    不确定我在这里做错了什么 但这是破坏的简单代码 if 10 1 lt lt 18 return 这给了我 Int 不能转换为 Bool 怎么了 与在 C 中你可以写 if x 这实际上是一个非零检查 if x 0 您必须在 Swift 中测
  • glutBitmapString 不显示任何内容

    我将使用 freeglut 函数 glutBitmapString 在屏幕上显示 FPS 但它什么也没显示 这是我的代码 有谁能弄清楚问题出在哪里吗 void PrintFPS frame time glutGet GLUT ELAPSED
  • 在 Bootstrap 中使用推/拉列更改 div 的顺序

    我正在尝试使用 Bootstrap 更改三列的顺序和跨度 具体取决于设备 我要做这个 但我总是会遇到缺少 div 的情况 以及我应该在的地方出现空白的情况 这是我最好的尝试 但显然有问题 div class row div class co
  • C - 使用 pjsip 时如何解决此错误?

    我在使用 pjsip 时遇到此错误 如何解决这个问题 我的系统中有麦克风 扬声器 但无法获取设备 http paste ubuntu com 6504337 Create audio device parameter to open the
  • 如何识别文件的文件类型?

    如何识别文件的确切文件类型 为了更好地理解 我提供更多细节 例如 如果我有一个名为 example exe 的文件 那么我可以轻松识别出它是一个 Windows 可执行文件 通过查看扩展名 exe 但是 如果我删除扩展名 exe 那么通过查
  • 通过好友访问受保护会员

    假设B类继承A类 B类继承friends C A 类有一个受保护的成员foo 可以C类访问foo C 标准修订版之间有什么差异吗 Example class A protected void foo class B public A fri
  • 获取 UTF-8 格式的文件名? (ä,ü,ö ...始终是“?”)

    我必须读取一些文件的名称并将它们作为字符串放入列表中 这并不难 我只是对某些字符 如 有一些问题 它们总是作为 在我的字符串中 有什么问题 嗯 编码 好吧 这应该很容易 这就是我的想法 所以我尝试使用如下函数 new String inse
  • 更改 NSWindow 标题栏的颜色

    我正在开发一个桌面应用程序 我想在其中更改 NSWindow 标题栏的颜色 我到底该怎么做呢 NSWindow 的内容视图有一个超级视图 它是 NSThemeFrame 的一个实例 该类负责绘制标题文本 窗口 工具栏背景纹理 并且它包含其他
  • 验证充气城堡上的 javacard 签名 ALG_ECDSA_SHA

    我的问题如下所示 我在 javaCard jcdk 2 2 2 上生成签名 当我想使用 BouncyCastle 在终端上验证它时 签名并不总是经过验证 3 66 中的 1 100 次尝试的平均值 签名是验证完毕 其余返回 false 当我