VirgilSDKPythia 0.12.1

VirgilSDKPythia 0.12.1

Sergey SeroshtanEvgeny 维护。



 
依赖项
VirgilSDK= 9.0.1
VirgilCryptoPythia= 0.17.1
 

  • Virgil Security

Virgil Pythia Objective-C/Swift SDK

Build Status CocoaPods Compatible Carthage compatible Platform GitHub license

简介 | SDK 特点 | 安装 | 使用示例 | 文档 | 支持

简介

Virgil Security 提供了一个 SDK,允许您与 Virgil Pythia 服务进行通信,并实现 Pythia 协议以生成用户的 BrainKey。 BrainKey 是基于用户密码的用户私有密钥。BrainKey 可以轻松恢复,并对在线和离线攻击具有抵抗力。

SDK 特点

安装

Virgil Pythia SDK 提供了一系列框架。这些框架通过 Carthage 和 CocoaPods 进行分发。在本指南中,您还可以找到一个名为 VirgilCrypto(Virgil 加密库)的额外包,该库用于 SDK 执行加密操作。

框架适用于以下系统:

  • iOS 9.0+
  • macOS 10.11+
  • tvOS 9.0+
  • watchOS 2.0+

COCOAPODS

CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它:

$ gem install cocoapods

要使用 CocoaPods 将 Virgil Pythia 集成到您的 Xcode 项目中,在 Podfile 中指定它:

target '<Your Target Name>' do
  use_frameworks!

  pod 'VirgilSDKPythia', '~> 0.10.0'
end

然后,运行以下命令:

$ pod install

Carthage

Carthage 是一个去中心化的依赖管理器,用于构建您的依赖关系,并提供二进制框架。

您可以使用 Homebrew 安装 Carthage,命令如下:

$ brew update
$ brew install carthage

要使用 Carthage 将 Virgil Pythia 集成到您的 Xcode 项目中,在项目根目录下创建一个名为 Cartfile 的空文件,并在 Cartfile 中添加以下行:

github "VirgilSecurity/virgil-pythia-x" ~> 0.10.0

链接着构建的二进制文件

要链接预先构建的框架到您的应用,运行以下命令:

$ carthage update --use-xcframeworks

这将为每个依赖项构建或从 github Releases 中下载预编译的框架。

为 iOS/tvOS/watchOS 构建

在您的应用程序目标的“常规”设置选项卡的“链接的框架和库”部分,从项目中 Carthage/Build 文件夹中添加以下框架:

  • VirgilSDKPythia
  • VirgilSDK
  • VirgilCryptoAPI
  • VirgilCrypto
  • VirgilCryptoFoundation
  • VirgilCryptoPythia
  • VSCCommon
  • VSCFoundation
  • VSCPythia

为每个检查“嵌入并签名”。

为 macOS 构建项目

在应用目标的“通用”设置标签页中,“嵌入的二进制文件”部分,从磁盘上的 Carthage/Build 文件夹将以下框架拖放到此区域

  • VirgilSDKPythia
  • VirgilSDK
  • VirgilCryptoAPI
  • VirgilCrypto
  • VirgilCryptoFoundation
  • VirgilCryptoPythia
  • VSCCommon
  • VSCFoundation
  • VSCPythia

此外,您还需要复制 macOS 的调试符号,以进行调试和崩溃报告。

在应用目标的“构建阶段”设置标签页中,单击“+”图标,选择“新建粘贴文件阶段”。单击“目标”下拉菜单,并选择“产品目录”。对于每个框架,将相应的 dSYM 文件拖放到此区域。

Swift 包管理器

Swift 包管理器是苹果官方用于管理 Swift 代码分发的工具。

苹果官方文档中说明了如何将框架添加到 Xcode 项目中。

使用示例

BrainKey

PYTHIA 服务可以直接作为基于用户 密码 或其他秘密数据生成强大加密密钥的方式。我们称这些密钥为 BrainKeys。因此,当您需要恢复私钥时,只使用用户的密码和 Pythia 服务。

要创建用户的 BrainKey,请按照以下操作进行

  • Virgil Dashboard 上注册您的 E2EE 应用程序,并获取您的应用程序凭证
  • 生成 API 密钥或使用可用的密钥
  • 在服务器端使用之前提到的参数(应用 ID、API 密钥、API 密钥 ID)设置 JWT 提供者
  • 使用 用户身份 生成 JWT 令牌并将其传输到客户端(用户端)
  • 在客户端设置 访问令牌提供者 以指定 JWT 提供者
  • 配置BrainKey功能,使用访问令牌提供程序并传递用户密码
  • 向Pythia服务发送BrainKey请求
  • 基于用户的密码或其他用户的秘密生成强大的加密密钥对

根据用户密码生成BrainKey

import VirgilSDK
import VirgilSDKPythia

/// 1. Specify your JWT provider

// Get generated token from server-side
let authenticatedQueryToServerSide: ((String) -> Void) -> Void = { completion in
    completion("eyJraWQiOiI3MGI0NDdlMzIxZjNhMGZkIiwidHlwIjoiSldUIiwiYWxnIjoiVkVEUzUxMiIsImN0eSI6InZpcmdpbC1qd3Q7dj0xIn0.eyJleHAiOjE1MTg2OTg5MTcsImlzcyI6InZpcmdpbC1iZTAwZTEwZTRlMWY0YmY1OGY5YjRkYzg1ZDc5Yzc3YSIsInN1YiI6ImlkZW50aXR5LUFsaWNlIiwiaWF0IjoxNTE4NjEyNTE3fQ.MFEwDQYJYIZIAWUDBAIDBQAEQP4Yo3yjmt8WWJ5mqs3Yrqc_VzG6nBtrW2KIjP-kxiIJL_7Wv0pqty7PDbDoGhkX8CJa6UOdyn3rBWRvMK7p7Ak")
}

// Setup AccessTokenProvider
let accessTokenProvider = CallbackJwtProvider { tokenContext, completion in
    authenticatedQueryToServerSide { jwtString in
        completion(jwtString, nil)
    }
}

/// 2. Setup BrainKey

let brainKeyContext = BrainKeyContext.makeContext(accessTokenProvider: accessTokenProvider)
let brainKey = BrainKey(context: brainKeyContext)

// Generate default public/private keypair which is Curve ED25519
// If you need to generate several BrainKeys for the same password,
// use different IDs (optional). Default brainKeyId value is nil.
let keyPair = try! brainKey.generateKeyPair(password: "Your password",
                                            brainKeyId: "Optional BrainKey id").startSync().getResult()

根据唯一URL生成BrainKey

典型的BrainKey实现使用密码或安全问题的答案查找来再生用户的私钥。但系统管理员生成的唯一会话链接也能完成此任务。

这通常适用于需要每次用户想要发送或接收消息时要求密码的情况,例如浏览器应用程序中的单会话聊天。

以下是使用BrainKey根据唯一URL再生私钥的一般流程

  • 当用户准备开始加密信息会话时,应用程序向用户发送短信
  • 短信包含一个唯一链接,例如https://healthcare.app/?session=abcdef13803488
  • 字符串'abcdef13803488'用作私钥再生的密码
  • 通过点击链接,用户立即使用通过BrainKey再生并现有的私钥建立安全的会话,无需输入额外的密码

实现时的注意事项

  • 链接是单次使用的。当用户点击链接时,原始链接过期而且无法再次使用,因此需要为每个新的聊天会话创建新的链接。
  • 所有URL链接都必须短期有效(建议有效期为一分钟)。
  • 应通过与用户将用于安全聊天会话的不同渠道发送短信。
  • 如果您想添加额外的保护来确保点击链接的人是预期的聊天参与者,可以要求用户提交他们的名字或任何其他安全问题。此答案需要作为BrainKey密码的一部分建立。
...
    let keyPair = try! brainKey.generateKeyPair(password: "abcdef13803488",
                                                brainKeyId: "Optional User SSN").startSync().getResult()
...

注意!如果你不需要使用其他参数,例如“可选用户SSN”,你可以简单地省略它:let keyPair = try! brainKey.generateKeyPair(password: "abcdef13803488").startSync().getResult()

文档

Virgil Security 提供了一组功能强大的 API,以下文档可以帮助您今天开始使用。

许可协议

此库按照 3-clause BSD 许可协议 发布。

支持

我们的开发者支持团队随时为您提供帮助。更多详情请访问我们的帮助中心

您可以在 Twitter 上找到我们,或通过电子邮件 [email protected] 联系我们。

还可以在 Slack 上从我们的支持团队获得额外帮助。