あなたのプライベートな瞬間。厳密にあなただけのために。
FaceIDロック • デバイスのみ • 軍事グレード暗号化
セキュアエンクレーブ
生体認証
暗号化ボールト
キー
256ビット
クラウド
クラウドなし
ストレージ
デバイス
NUDEFNDR PROに含まれています
暗号化パイプライン
ソースコード
import CryptoKit
final class VaultCrypto {
/// ChaCha20-Poly1305 AEADで写真データを暗号化
static func encryptData(_ data: Data, key: SymmetricKey) throws -> Data {
// ChaCha20-Poly1305は以下を提供:
// - 機密性 (暗号化)
// - 認証性 (HMAC)
// - 完全性 (改ざん検出)
let sealedBox = try ChaChaPoly.seal(data, using: key)
return sealedBox.combined // Nonce + 暗号文 + タグ
}
/// ボールトの写真を復号化
static func decryptData(_ encryptedData: Data, key: SymmetricKey) throws -> Data {
let sealedBox = try ChaChaPoly.SealedBox(combined: encryptedData)
// 認証タグは自動的に検証される
// データが改ざんされている場合はエラーをスロー
let decryptedData = try ChaChaPoly.open(sealedBox, using: key)
return decryptedData
}
/// エントロピー検証付きでボールト暗号化キーを生成
static func generateVaultKey() throws -> SymmetricKey {
let key = SymmetricKey(size: .bits256)
// エントロピーがNIST SP 800-90B標準を満たしているか検証
let keyData = key.withUnsafeBytes { Data($0) }
let entropy = calculateEntropy(keyData)
guard entropy >= 7.5 else {
throw CryptoError.insufficientEntropy
}
return key
}
}
ChaCha20-Poly1305は認証付き暗号化を提供します。WireGuard、TLS 1.3、Signalプロトコルで使用されるのと同じ標準です。
ボールトを開くたびにFaceID/Touch IDが必要です。電話がロック解除されていても、ボールトはロックされたままです。
セキュリティモデル
**デバイスを紛失したり、電話を交換したり、NuDefndrを再インストールした場合、ボールトデータを回復することはできません。**これは意図的です—真のセキュリティを保証する唯一の方法です。
暗号化キーはデバイスのSecure Enclaveにハードウェアバインドされています。物理デバイスがなければ、ボールトの内容は永久にアクセス不可能です—私たちでさえも。