cifra, 在嵌入式用户中,一个加密基元的集合

分享于 

8分钟阅读

GitHub

  繁體 雙語
A collection of cryptographic primitives targeted at embedded use.
  • 源代码名称:cifra
  • 源代码网址:http://www.github.com/ctz/cifra
  • cifra源代码文档
  • cifra源代码下载
  • Git URL:
    git://www.github.com/ctz/cifra.git
    Git Clone代码到本地:
    git clone http://www.github.com/ctz/cifra
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/ctz/cifra
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Cifra

    Cifra是针对嵌入式使用的加密原语的集合。

    Build Status

    Documentation

    Analysis Status

    Coverage Status

    目标

    按降序强调,cifra的目的是:

    • 清晰清晰的和英镑的简易。
    • 几种算法中边通道泄漏的对策。
    • 嵌入式使用的适用性特别是: cifra使用标准的标准C 库,并且在代码和数据空间方面效率相当高。

    特性

    • GCM AES AES AES CCM CCM CCM CCM authenticated authenticated authenticated认证加密模式。
    • NORX 认证加密系统。
    • 英镑 SHA224,英镑间距, SHA384和比索散列函数。
    • 英镑 SHA3-224,英镑 SHA3-256,英镑 SHA3-384,SHA3-512散列函数( FIPS兼容)。
    • ChaCha20 和字节的Salsa20流密码。
    • Poly1305 一次。
    • 100%代码覆盖线,零 static 分析缺陷,valgrind-clean。

    另外cifra从兰利的(。μNaCl,NaCl,tweetNaCl,Adam curve25519-donna ) 导入curve25519来比较嵌入式目标的各种实现。

    文档

    可以在阅读文档。

    测试

    有相当多的测试可用:

    • 主机生成: 在 src 目录中运行 make test。 这将构建并运行各种测试程序。
    • 模拟嵌入构建: 在 src/arm 目录中运行 make test。 这将在路径上找到 qemu-system-gnuarmeclipse。 这些测试假设一个Cortex-M3目标。
    • 目标测试上的Cortex-M0 :src/arm 目录中运行 make test.stm32f0。 这将在路径上找到 openocd,并通过stlinkv2附加 STM32F0xx。 它使用 ARM semihosting来报告结果。
    • 目标测试上的 cortex-m3/4: 按上方式运行 make test.stm32f1 或者 make test.stm32f3

    另外,所有嵌入目标都希望 arm-none-eabi 链图位于路径上。

    测量

    -Os ( 空间优化) 上执行的所有测量,在以下mcu上:

    核心部件号价格( 1s ) Max时钟 Flash SRAM
    Cortex-M0STM32F030F4P61.17EUR48MHz16KB4KB
    Cortex-M3STM32F103C8T62.87EUR72MHz64KBspdif
    Cortex-M4FSTM32F303K6T64.53EUR72MHz32KB12KB

    我的博客文章中提供了AEAD模式的更多度量信息:

    AES

    这里测试执行一个关键点调度,然后加密一个块。

    128位 键

    内核周期( 密钥明细表+ 块) 循环( 密钥计划) 循环( 块) 堆栈代码大小
    Cortex-M0715621475009312B1020B
    Cortex-M3469215913101300B960B
    Cortex-M4F459115713020300B960B

    256-bit-键

    内核周期( 密钥明细表+ 块) 循环( 密钥计划) 循环( 块) 堆栈代码大小
    Cortex-M01061136506961396B1100B
    Cortex-M3673524504285380B1048B
    Cortex-M4F658824164172380B1048B

    AES128-GCM

    这里测试对 16字节消息进行加密和验证,并对 16字节进行。 它包括初始密钥计划。

    核心循环堆栈代码大小
    Cortex-M057022796B2600B
    Cortex-M344306812B2644B
    Cortex-M4F43657812B2644B

    AES128-EAX

    这里测试对 16字节消息进行加密和验证,并对 16字节进行。 它包括初始密钥计划。

    核心循环堆栈代码大小
    Cortex-M050564932B2836B
    Cortex-M332855932B2780B
    Cortex-M4F32159932B2780B

    AES128-CCM

    这里测试对 16字节消息进行加密和验证,并对 16字节进行。 它包括初始密钥计划。

    核心循环堆栈代码大小
    Cortex-M037677772B2280B
    Cortex-M324462780B2256B
    Cortex-M4F23949780B2256B

    NORX32

    这里测试对 16字节消息进行加密和验证,并对 16字节进行。

    核心循环堆栈代码大小
    Cortex-M010692320B1636B
    Cortex-M36909320B1820B
    Cortex-M4F6855320B1820B

    ChaCha20

    这里测试对 64字节消息进行加密。

    核心循环堆栈代码大小
    Cortex-M05981564B1416B
    Cortex-M33487544B1328B
    Cortex-M4F3468544B1328B

    ( 与AES相比,添加AES256键明细表加 4块。 这大约是 33K 个周期。)

    Salsa20

    这里测试对 64字节消息进行加密。

    核心循环堆栈代码大小
    Cortex-M06173560B1412B
    Cortex-M33320552B1272B
    Cortex-M4F3311552B1272B

    弹出

    这个测试散列空字符串( 一个压缩函数调用)。

    核心循环堆栈代码大小
    Cortex-M011561312B1760B
    Cortex-M36530300B1708B
    Cortex-M4F6278300B1708B

    SHA512

    这个测试散列空字符串( 一个压缩函数调用)。

    核心循环堆栈代码大小
    Cortex-M038447796B2888B
    Cortex-M328771836B2988B
    Cortex-M4F28777836B2980B

    SHA3-256

    这个测试散列空字符串( 一个海绵排列)。

    核心循环堆栈代码大小
    Cortex-M093648848B2212B
    Cortex-M374321856B2164B
    Cortex-M4F72215856B2140B

    SHA3-512

    这个测试散列空字符串( 一个海绵排列)。

    核心循环堆栈代码大小
    Cortex-M092565880B2212B
    Cortex-M373509888B2164B
    Cortex-M4F71419888B2140B

    HMAC-SHA256

    这个测试在消息"Hello World"上计算一个带有 32字节密钥的MAC。

    核心循环堆栈代码大小
    Cortex-M0489241328B2200B
    Cortex-M3283331324B2132B
    Cortex-M4F273371324B2132B

    Poly1305-AES

    这个测试在消息"Hello World"上计算一个带有 32字节密钥的MAC。 它包括了 AES nonce处理。

    核心循环堆栈代码大小
    Cortex-M015719704B1920B
    Cortex-M311328696B1964B
    Cortex-M4F10706696B1932B

    Curve25519

    这个测试是一个点乘。

    核心循环堆栈代码大小
    Cortex-M04070271464B5596B
    Cortex-M33720363448B5536B
    Cortex-M4F3720105448B5536B

    有关其他curve25519实现的comparitive度量,请参阅 curve25519-shootout

    C 库要求

    Cifra需要 memcpymemsetabort

    的未来

    • Keccak哈希函数( aka SHA3 )。
    • Poly1305一次性 MAC。
    • 使用FPU的Cortex-M4F常量时间 curve25519.
    • Cortex-M3 ( 避免可变时间乘数)的常量时间 curve25519.

    过去的Bug/建议

    许可证

    CC0

    请属于作者这是一个请求,而不是许可以证条款。

    作者

    ,,。


    COL  USE  Collect  collection  Crypt  crypto