❗ 重要提示! 在继续之前,请阅读 EUDI 钱包参考实现项目说明
根据 ISO/IEC 18013-5 标准 (0.9.0) 实现的 mDoc 安全
会话加密使用标准的临时密钥 ECDH 来建立会话密钥,用于经过身份验证的对称加密。 SessionEncryption
结构体实现了会话加密(目前针对 mDoc)。它从以下内容初始化:
var sessionEncr = SessionEncryption(se: sessionEstablishmentObject, de: deviceEngagementObject, handOver: handOverObject)
let data = try sessionEncr.decrypt(sessionEstablishmentObject.data)!
mdoc 身份验证的安全目标是防止克隆 mDoc 并缓解中间人攻击。 目前实现了 mDoc 端(设备身份验证的生成),它从会话转录对象、设备私钥和阅读器临时公钥初始化。
let mdocAuth = MdocAuthentication(transcript: sessionEncr.transcript, authKeys: authKeys)
let deviceAuth = try mdocAuth.getDeviceAuthForTransfer(docType: "org.iso.18013.5.1.mDL", deviceNameSpacesRawData: [0xA0], bUseDeviceSign: bUseDeviceSign)!
let ourDeviceAuthCBORbytes = deviceAuth.encode(options: CBOROptions())
mdoc 阅读器验证的数据是 ReaderAuthentication 结构。目前实现了 mDoc 端(验证 reader-auth CBOR 数据)。
let mdocAuth = MdocReaderAuthentication(transcript: sessionEncr.transcript)
guard let readerAuthRawCBOR = docR.readerAuthRawCBOR else { continue }
let b = try mdocAuth.validateReaderAuth(readerAuthCBOR: readerAuthRawCBOR, readerAuthCertificate: docR.readerCertificate!, itemsRequestRawData: docR.itemsRequestRawData!)
详细文档请参见此处
发布的软件是初始开发版本
版权所有 (c) 2023 欧盟委员会
根据 Apache License, Version 2.0(“许可证”)获得许可; 除非遵守许可证的规定,否则您不得使用此文件。 您可以在以下网址获取许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或以书面形式达成协议,否则软件是按“原样”分发的,不提供任何形式的明示或暗示的保证或条件。 有关管理权限和限制的特定语言,请参阅许可证。