2 个版本
0.1.1 | 2023 年 11 月 26 日 |
---|---|
0.1.0 | 2023 年 11 月 26 日 |
#693 in 密码学
88KB
1.5K SLoC
PSP 安全协议的 Rust 实现
谷歌发布了 PSP(PSP 安全协议)规范和参考实现。该实现是用 C 语言编写的。
psp_security 包是参考实现的 Rust 版本。它使用 Rust 实现了 PSP 加密/解密功能,以确保内存安全。
该实现包括一个核心 psp_security
库,该库实现了 PSP 数据包封装、解封装、加密和解密,以及一个使用此库的命令行工具。此工具对于生成测试向量以及从命令行加密/解密内容很有用。
构建
cargo build
运行 crates 单元测试。
cargo test
安装命令行工具。以下示例将其安装到当前目录。
cargo install --path .
命令行工具
提供了一个名为 psp
的命令行工具,用于说明如何使用 psp_security 库,并提供一些用于使用 PSP 加密和解密 pcap 文件中的数据包的简单工具。
Usage: psp <COMMAND>
Commands:
create Create files that are useful for testing PSP encryption and decryption
encrypt Perform PSP encryption on plaintext packets read from a pcap file
decrypt Performs PSP decryption on PSP-encrypted packets read from a pcap file
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
示例用法
# Create a sample input pcap file
psp create pcap -n 10 -v ipv4 -o cleartext.pcap
# Create a sample configuration file
psp create config --spi 98234567 --mode transport --alg aes-gcm128 -c example.cfg
# Encrypt the pcap file using the configuration
psp encrypt -c example.cfg -i cleartext.pcap -o encrypted.pcap
# Decrypt the encrypted packets using the configuration
psp decrypt -c example.cfg -i encrypted.pcap -o decrypted.pcap
# Compare the decrypted packets against the origin sample packets
tcpdump -X -r cleartext.pcap > cleartext.txt
tcpdump -X -r decrypted.pcap > decrypted.txt
diff cleartext.txt decrypted.txt
命令详情
psp encrypt
使用 psp encrypt
加密 pcap 文件中的数据包需要不仅包含数据包的 pcap 文件,还需要一个配置文件,该文件指定了 PSP 配置。
$ psp encrypt -h
Perform PSP encryption on plaintext packets read from a pcap file
Usage: psp encrypt [OPTIONS]
Options:
-v, --verbose Enable verbose mode
-e, --error Forces a single bit error in each output packet which will cause authentication to fail
-c <CFG_FILE> PSP encryption configuration file [default: psp_encrypt.cfg]
-i, --input <INPUT> Input pcap file containing plaintext packet(s) to encrypt [default: cleartext.pcap]
-o, --output <OUTPUT> Output pcap file where the encrypted packet(s) will be written [default: psp_encrypt.pcap]
-h, --help Print help (see more with '--help')
psp decrypt
使用 psp encrypt
加密 pcap 文件中的数据包需要不仅包含数据包的 pcap 文件,还需要一个配置文件,该文件指定了 PSP 配置。
$ psp decrypt -h
Performs PSP decryption on PSP-encrypted packets read from a pcap file
Usage: psp decrypt [OPTIONS]
Options:
-v, --verbose Enable verbose mode
-c <CFG_FILE> PSP encryption configuration file [default: psp_encrypt.cfg]
-i, --input <INPUT> Input pcap file containing encrypted packet(s) to decrypt [default: psp_encrypt.pcap]
-o, --output <OUTPUT> Output pcap file where the decrypted packet(s) will be written [default: psp_decrypt.pcap]
-h, --help Print help (see more with '--help')
psp create config
可以使用 psp create config
命令创建一个示例配置文件,格式为 json 或纯文本。纯文本格式基于谷歌 PSP C 语言实现使用的配置文件格式。这里支持它,以便与 C 语言实现进行兼容性测试。
$ psp create config -h
Create a configuration file that can be used with the encrypt and decrypt commands
Usage: psp create config [OPTIONS]
Options:
-s, --spi <SPI> SPI. 32b hex value. Upper bit selects the master key [default: 2587121272]
-m, --mode <MODE> Encap mode: Tunnel or Transport [default: transport] [possible values: transport, tunnel]
-a, --alg <ALG> Crypto Algorithm [default: aes-gcm256] [possible values: aes-gcm128, aes-gcm256]
--crypto-offset <CRYPTO_OFFSET> Crypto Offset [default: 0]
-v, --vc Include virtual cookie
-c, --cfg-file <CFG_FILE> Name of the output configuration file [default: psp_encrypt.cfg]
-j, --json json file format
-h, --help Print help (see more with '--help')
psp create pcap
可以使用 psp create pcap
工具创建一个用于测试目的的示例 pcap 文件。
$ psp create pcap -h
Create a cleartext pcap file that can be used for testing
Usage: psp create pcap [OPTIONS]
Options:
-n, --num <NUM> Number of packets to create [default: 1]
-v, --ver <VER> IPv4 or IPv6 packets [default: ipv4] [possible values: ipv4, ipv6]
-e, --empty Create empty packets where empty means the size of the L4 payload is 0
-o <OUTPUT> Name of the pcap output file [default: cleartext.pcap]
-h, --help Print help (see more with '--help')
依赖项
~12MB
~229K SLoC