介绍
基本上,我如何/在哪里保留可执行文件需要的加密密钥?
让我解释一下我的可执行文件的样子。它基本上是一个使用swift build --configuration=release --product=App
.
Package.swift
:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "App",
defaultLocalization: "en",
platforms: [
.macOS(.v10_15),
],
products: [
.executable(name: "App", targets: ["App"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.1"),
.package(url: "https://github.com/apple/swift-crypto", from: "2.0.0")
],
targets: [
.target(name: "App", dependencies: [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
.product(name: "Crypto", package: "swift-crypto"),
]),
]
)
一些想法
- 我知道 Apple 在 macOS 上提供了一个钥匙串来存储密钥。问题是我的可执行文件没有以任何方式签名,因此很难强制执行只有我的可执行文件才能访问存储的密钥。(至少我是这么认为的,如果我错了,请纠正我)
Git 似乎以某种方式将用户凭据存储在钥匙串中。他们是怎么做到的呢?他们的方式甚至安全吗?
我的下一个想法是将密钥存储在用户的主目录中,例如
.ssh
. 这似乎不安全。据我所知,系统上运行的任何应用程序都可以读取密钥,对吧?实现此目的的另一种方法是使用密码加密密钥,然后让用户在每次需要密钥时输入密码。这是最不可取的选择,因为它不方便。
我想到的最后一个选择是以某种方式签署我的可执行文件。有什么方法可以签署我的可执行文件,以便它可以在钥匙串中有自己的受保护空间?我需要的是一个流程来签署我的可执行文件,而不需要 Apple 开发者帐户或任何其他中央授权。
问题
如何安全地存储加密密钥,以便只有我的可执行文件(编辑:和用户)可以访问它们?