S4Crypto
S4Crypto是一个现代的、广泛的跨平台加密函数库,可以从C API以及JavaScript中调用。它是为可移植性设计的,因此它可以针对不同的架构进行交叉编译,包括macOS、iOS、Linux、Android和Windows。
S4Crypto还能构建成JavaScript webassembly 库。
S4Crypto还包含一套完整兼容FIPS-140的操作和CAVP测试。
S4Crypto是storm4和zerodark.cloud使用的加密库。
特性
S4允许程序员以高级C调用的形式使用它,而无需深入了解底层加密算法。它提供了一个一致且易于使用的接口。
散列算法
支持以下散列算法:
-
MD5
-
SHA-1
-
SHA-2 224/256/384/512
-
SHA-3 224/256/384/512
-
KECCAK_256(如图所示在Ethereum中使用)
-
SKEIN-256, 512, 1024
-
xxHash 32/64
消息认证代码
支持HMAC和SKEIN版本的MAC,适用于所有合适的散列算法。
对称加密函数
以下加密方式受到支持:
- AES 128/192/256
- Twofish-256
支持的模式包括EBC、CBC,以及带有填充的CBC编解码
可调整块加密
Threefish在256、512和1024位模式下都受到支持。
公钥函数
以下公钥算法受到支持:
- ECC-384
- Curve41417(Bernstien/Lange 曲线41417)
密钥拆分
- 使用Shamir的密钥分享将密钥分割和重新组装,最多可达1024位。
S4Crypto 密钥 API
S4Crypto还提供了更高级的API,通过JSON表示管理处理对称、公钥和分割加密密钥。
S4Crypto的密钥编码示例
#AES-128 key wrapped by Argon2 encoded passphrase
"{
"version": 1,
"encoding": "p2k",
"keySuite": "AES-128",
"p2k-params": "$Argon2d$m=65536,t=2,p=1,k=16$wzXNtftfk/s=",
"mac": "YqEnigy+Y78=",
"esk": "mC564p9mn7AXP/qmFI9l6A==",
"iv": "FplyP4pAdcBoAkLgbIOGng==",
"encrypted": "GktZqypxDbZUuCW5WfhGcw==",
"encodedObject": "AES-128"
}
#AES-256 key wrapped by ECC public key
{
"version": 1,
"encoding": "Curve41417",
"keyID": "I0zFCdE4foQamhXa/f1u4Q==",
"keySuite": "AES-256",
"mac": "wHgedFID0nQ=",
"encrypted": "MIGkBglghkgBZQMEAgEE...vtdB+wVgNQcufVkoork3mY="
}
#AES-128 key split into 8 shares with payload and one of the shares
{
"version": 1,
"encoding": "Shamir-AES256",
"keySuite": "AES-128",
"mac": "POStvPXgTXA=",
"threshold": 6,
"totalShares": 8,
"shareOwner": "qRiYlopAc3w=",
"iv": "xsbKvBr8bh3BprWy+pZnqhO6Gwj035RyNKgOcpmHiuE=",
"encrypted": "t/L35MhILRR2cBh2QHeKqw==",
"shareIDs": [
"/uVqyD/TCw8=",
"MN9PaXCEMug=",
"Te/h6RWNV+A=",
"HY7veIQBRwQ=",
"bF20c6keLJQ=",
"R4i5eWjeGIs=",
"DDnQNZhnCHk=",
"kUuV20lxNvM="
],
}
{
"version": 1,
"keySuite": "Shamir",
"shareOwner": "qRiYlopAc3w=",
"shareID": "/uVqyD/TCw8=",
"threshold": 6,
"index": 5,
"encrypted": "mkfi6TjyBi1lGzFEwZ9+dJJoKXpWz2Xk6SxMX6t/Vos=",
}
#Curve41417 self-signed public key
{
"version":1,
"keySuite":"Curve41417",
"keyID":"k/Ot8M1rrE9gsAQ52wfatQ==",
"pubKey":"BB1oTbiIzXvKAeoEGGpDNs1L25++9fD...eENIcVdgbFSnN0U1n1r",
"start-date":"2018-10-31T16:51:11Z",
"signable-properties":["keyID","keySuite","pubKey","start-date"],
"signatures":[
{
"sigID":"rGXAFobko5RCinIFBRkMoA==",
"hashAlgorithm":"SHA-256",
"signature":"MGwCNAUY8MbJv0XnvB0C...8xDradimCNzVpTr+sr54=",
"issuer":"k/Ot8M1rrE9gsAQ52wfatQ==",
"issue-date":"2018-10-31T16:51:11Z",
"sig-expire":0,
"signed-properties":["keyID","keySuite","pubKey","start-date"]
}
]
}
开始使用
最低部署目标是iOS 9.2 / macOS 10.10 / tvOS 9.0 / watchOS 2.0。
cocoaPods
安装 S4Crypto
最简单的方式是使用 cocoaPods。
use_frameworks!
pod 'S4Crypto', :git=>'https://github.com/4th-ATechnologies/S4'
执行 pod install
后,打开您的 .xcworkspace
并导入
// Swift
import S4Crypto
// Objective-C on iOS 8+ with `use_frameworks!`
@import S4Crypto;
Carthage
S4Crypto.xcodeproj
项目包含针对 iOS、macOS、tvOS 和 watchOS 的框架目标。
构建 S4Crypto
如果您希望自行构建这些框架,可以使用 makefile 或 'S4Crypto.xcodeproj' 文件
为 macOS 构建
S4Crypto 的 macOS 版本使用 Xcode 10.1 构建,并使用 S4Crypto-osx 目标。这将生成放在 build/osx/Debug 或 build/osx/Release 目录下的 S4Crypto.Framework。已提供 Xcode 测试和操作测试。可以使用 S4-optest Xcode 目标构建和运行操作测试。
为 iOS 构建
S4Crypto 的 iOS 版本使用 Xcode 10.1 构建,可以选择生成静态库或框架。只提供了调用操作测试的 Xcode 测试。可以使用 S4Crypto-ios-static 测试目标构建和运行 Xcode 测试操作测试。
使用 Web Assembly 为 JavaScript 构建
S4Crypto 可以使用 emsdk 为 JavaScript 构建。构建此项目的最简单方法是运行 make em_s4
。这将生成 libS4.js、libS4.wasm 和 libS4.bc 文件。
运营测试
S4Crypto 包含一套完整的运营测试,它可以对所有逻辑接口进行测试,也可以作为 FIPS-140 验证的一部分。
在 macOS 上,可以通过运行 make optest_osx
来创建操作测试,然后通过运行 make run_optest_osx
来执行。
CAVP 测试
S4Crypto 能够处理由 CAVP 产生的以下测试向量:
- AES 块密码在 ECB、CBC 模式下
- 安全哈希 SHA-1、SHA-2 和 SHA-3
- 消息认证(HMAC)
在 macOS 上,可以通过运行 make cavp_osx
来创建操作测试,然后通过运行 make run_cavp
来执行。提供了一套已知答案测试(KAT)。