Zhao Yang's homepage!
-
CCC 数字钥匙Release 3 学习笔记 车主配对 Part3
6.1 概述 车主配对由钥匙设备上的Digital Key framework来控制,通过使用APDU管理数字钥匙的配置,整个方案由智能卡芯片提供保护。 智能卡COS提供可信的根,提供信任链的起点。 车辆能够通过NFC使用数字钥匙的AID选择Digital Key applet,并通过对应的AID选择Digital Key framework。 基于选择AID,NFC控制器可以重新配置来改变和智能卡或者Digital Key framework通信,反之亦然。 新车主设备配对流或者车主设备修改不意味着有隐式的取消配对,比如,一个新钥匙设备车主配对流只改变车主的钥匙。存在的已经配对的共享/好友钥匙和车辆的公钥不会受到影响。 Digital Key applet实例应当在车主配对执行之前为可用状态。
-
CCC 数字钥匙Release 3 学习笔记 车主配对命令 Part2
整理了一下CCC组织的汽车数字钥匙Release 3中关于车主配对Owner Paring,过程的APDU指令和数据说明。基本可以算是在车端的角度进行车主配对操作。里面的章节表格编号,都按照CCC数字钥匙Release 3文档中的编号走,方便将来检索对照。 车主配对命令
-
CCC 数字钥匙Release 3学习笔记 Part1
0 前言 2022年8年开始离开了从事14年的密码行业,去了汽车行业,当然在全新的行业里,还是去做密码相关的东西。最近开始学习目前CCC正在推广的的数字钥匙规范。 1 介绍 CCC数字钥匙技术规范(Digital Key Technical Specification)Release 3详细描述了一个数字钥匙生态系统,这个数字钥匙生态系统使用标准化数字钥匙applet、标准化车辆访问协议(vehicle access protocol)和一个可扩展的架构来支持不同车辆OEM和设备OEM进行数字钥匙服务的大规模开发。 Release 3是向前兼容Release 2的,但是Release 3不支持Release 1。Release 1可以独立与Release2和3部署。 数字钥匙技术规范Release 3基于BLE/UWB 或者NFC作为低层的无线通信技术来启用数字钥匙服务。数字钥匙服务管理框架被设计为和无线通信技术无关的,使得框架可以支持其他技术。
-
盲签名算法的原理与C语言实现
0x01 概述 盲签名(Blind Signature) 是由Chaum,David提出的一种数字签名方式,其中消息的内容在签名之前对签名者是不可见的(盲化)。经过盲签名得到的签名值可以使用原始的非盲消息使用常规数字签名验证的方式进行公开验证。盲签名可以有效的保护隐私,其中签名者和消息作者不同,在电子投票系统和数字现金系统中会被使用。 盲签名常常被类比成下面的场景:Alice想让Bob在自己的文件上签名,但是不希望Bob看到文件内容,于是Alice在文件上方叠放了一张复写纸,然后将文件和复写纸放入信封密封起来交给Bob。Bob再拿到信封后验证了Alice的身份后,直接在密封好的信封上签字,这样虽然Bob是对密封后的信封签字,但是Alice拿到签名后的信封后,拆开信封就可以拿到经过Bob签字的文件。
-
Node.js使用ffi-napi,ref-array-napi,ref-struct-napi调用动态库
0x01 概述 使用electron开进行桌面程序的开发,似乎成了WEB前端开发人员转桌面程序开发的首选。近期有一些使用在electron中使用加密锁的需求,学习了一下在Node.js中通过ffi-napi模块调用动态链接库,把几款加密锁产品的动态库使用javascript封装了一下,实现了electron中使用加密锁功能。 开发过程中遇到了一些问题,踩了一些坑,这里总结记录一下。这里使用接口函数参数类型比较复杂的ROCKEY-ARM的动态链接库来进行开发。
-
GDPR学习摘要
1.General provisions 一般规定 1.1 Subject-matter and objectives 主体和目标 本条例规定了关于保护自然人处理个人数据的规则和个人数据自由流动的规则。 本条例保护自然人的基本权力和自由,尤其保护他们个人的数据权力。 在欧盟内部,个人数据的自由流动不应该与保护自然人有关的个人数据处理的原因而受到限制和禁止。
-
localhost证书
事情的缘由是客户的Web应用程序需要和自己公司开发的原生应用程序(一个websockets服务)通信,原生应用程序需要分发到客户的最终用户。原生websockets服务程序是安装部署在每一个最终客户的计算机上的,Web应用在请求ws服务地址是ws://127.0.0.1或者ws://localhost,由于之前给客户提供的Web应用通信示例都是HTTP页面,现在客户要使用HTTPS。在HTTPS页面上HTTP的请求都会被拒绝,浏览器禁止向非安全链接发送XMLHTTPRequest(XHR)或者WebSockets请求。这个称为混合内容阻断。要与Web应用程序通信,原生的WebSockets服务应用程序需要使用wss协议。
-
比特币HD钱包 BIP32协议
密钥分散 Key derivation 约定 Conventions 下面为约定的标准函数: point(p): 返回secp256k1的EC曲线上基点和整数p点乘结果的坐标。 $ser_{32}(i)$: 序列化32bits无符号整数i为一个4字节序列,高位在前。 $ser_{256}(p)$: 序列化整数p为一个32字节的序列,高位在前。 $ser_{p}(P)$: 序列化坐标对P=(x,y)为通过(0x02 or 0x03)| |$ser_{256}(x)$ (开头的字节取决于y坐标的校验),使用SEC1的压缩的字节序列。 $parse_{256}(p)$: 将32字节的序列解析为256bits的数,高位在前。
-
比特币钱包介绍
比特币钱包涉及钱包程序和钱包文件。钱包程序创建公钥来接受比特币(satoshis)付款,并使用对应的私钥来花掉比特币。钱包文件保存私钥和其他与钱包程序相关的交易信息(可选)。 钱包程序 Wallet Programs 允许接受和支付比特币是钱包软件的唯一功能,但是一个特定的钱包程序不需要同时做这两件事,两个钱包程序可以一起工作,一个程序分发公钥来接收比特币,一个程序进行交易签名来支付这些比特币。 钱包程序也需要和peer-to-peer网络进行交互,以从区块链中获得信息并广播出新的交易。当然,分发公钥和交易签名程序并不需要和peer-to-peer网络本身进行交互。 因此钱包系统(wallet system)就有三个必须的,但是缺可以独立的部分:一个公钥分发程序,一个签名程序,一个联网程序。
-
OpenSSL 在Windows上的编译
近期工作中遇到一个早期的项目,使用了很古老的OpenSSL的密码库,在VC++ 2019等新环境下无法使用这么古老的Lib文件,现在的需要把旧的工程从VC++ 2005迁移到VC++ 2019上来。现在需要使用VC++ 2019编译一下OpenSSL。发现现在OpenSSL的编译跟早期版本的编译有了一点变化,记录一下编译的过程备忘。