适用于 iOS 的 EUDI 钱包 ISO/IEC 18013-5 安全库

重要提示! 在继续之前,请阅读 EUDI 钱包参考实现项目说明


eudi-lib-ios-iso18013-security

Swift Lines of Code Duplicated Lines (%) Reliability Rating Vulnerabilities

根据 ISO/IEC 18013-5 标准 (0.9.0) 实现的 mDoc 安全

会话加密

会话加密使用标准的临时密钥 ECDH 来建立会话密钥,用于经过身份验证的对称加密。 SessionEncryption 结构体实现了会话加密(目前针对 mDoc)。它从以下内容初始化:

  1. 从 mDoc 阅读器收到的会话建立数据。
  2. 从 mDoc 生成的设备交互数据。
  3. 切换数据。
var sessionEncr = SessionEncryption(se: sessionEstablishmentObject, de: deviceEngagementObject, handOver: handOverObject)
let data = try sessionEncr.decrypt(sessionEstablishmentObject.data)!

mdoc 身份验证

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 阅读器身份验证

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

除非适用法律要求或以书面形式达成协议,否则软件是按“原样”分发的,不提供任何形式的明示或暗示的保证或条件。 有关管理权限和限制的特定语言,请参阅许可证。