Allwinner H6とCryptography

Kernel 5.5.yになってAllwinner CPUでHW暗号化できるとのことで試してみました。私自身、HWの暗号化について全く知識はないのですが、作るだけは作ることができました。結論は全然だめでした。おそらくまだ開発途上なので、今使っているデバイス、WiFiやディスクの暗号化には使えないということです。いまのところaes-cbcが使えるようですが、残念ながら私の暗号化ディスクはaes-xtsでした。

LUKS header information for /dev/mmcblk2p2

Version:       	1
Cipher name:   	aes
Cipher mode:   	xts-plain64
Hash spec:     	sha256
Payload offset:	4096

カーネルオプションは次のようにしました。

ビルドしてdmesgのアウトプットです。

[   44.585722] sun8i-ce 1904000.crypto: Set mod clock to 300000000 (300 Mhz) from 24000000 (24 Mhz)
[   44.588565] sun8i-ce 1904000.crypto: will run requests pump with realtime priority
[   44.588767] sun8i-ce 1904000.crypto: will run requests pump with realtime priority
[   44.588915] sun8i-ce 1904000.crypto: will run requests pump with realtime priority
[   44.588991] sun8i-ce 1904000.crypto: will run requests pump with realtime priority
[   44.589053] sun8i-ce 1904000.crypto: Register cbc(aes)
[   44.591762] sun8i-ce 1904000.crypto: Register ecb(aes)
[   44.596913] sun8i-ce 1904000.crypto: Register cbc(des3_ede)
[   44.599894] sun8i-ce 1904000.crypto: Register ecb(des3_ede)
[   44.604083] sun8i-ce 1904000.crypto: CryptoEngine Die ID 0

あとは cat /proc/cryptoで暗号のリストを表示できます。

追記2

リサーチしてみました。aes-xtsが速くこれが正解のようです。サイトによるとaes-cbcがHW支援が有効ということですが、不可解なことにソフトウェアエンコードより遅くなっているという結果になってます。

kernel v5.5.y

$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       321649 iterations per second for 256-bit key
PBKDF2-sha256     569878 iterations per second for 256-bit key
PBKDF2-sha512     234896 iterations per second for 256-bit key
PBKDF2-ripemd160  185391 iterations per second for 256-bit key
PBKDF2-whirlpool   82643 iterations per second for 256-bit key
argon2i       4 iterations, 180486 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 200539 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm | Key |  Encryption |  Decryption
        aes-cbc   128b    74.6 MiB/s    82.8 MiB/s
    serpent-cbc   128b    29.6 MiB/s    34.0 MiB/s
    twofish-cbc   128b    44.4 MiB/s    51.0 MiB/s
        aes-cbc   256b    69.4 MiB/s    77.3 MiB/s
    serpent-cbc   256b    30.1 MiB/s    33.9 MiB/s
    twofish-cbc   256b    46.3 MiB/s    51.4 MiB/s
        aes-xts   256b   385.2 MiB/s   375.9 MiB/s
    serpent-xts   256b    30.7 MiB/s    35.4 MiB/s
    twofish-xts   256b    50.7 MiB/s    54.1 MiB/s
        aes-xts   512b   351.0 MiB/s   357.8 MiB/s
    serpent-xts   512b    32.7 MiB/s    35.1 MiB/s
    twofish-xts   512b    51.4 MiB/s    54.6 MiB/s

kernel v5.4.6

$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       321649 iterations per second for 256-bit key
PBKDF2-sha256     569259 iterations per second for 256-bit key
PBKDF2-sha512     234896 iterations per second for 256-bit key
PBKDF2-ripemd160  185654 iterations per second for 256-bit key
PBKDF2-whirlpool   82435 iterations per second for 256-bit key
argon2i       4 iterations, 180833 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 196031 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm | Key |  Encryption |  Decryption
        aes-cbc   128b   358.4 MiB/s   410.6 MiB/s
    serpent-cbc   128b    29.3 MiB/s    33.8 MiB/s
    twofish-cbc   128b    45.0 MiB/s    50.8 MiB/s
        aes-cbc   256b   310.0 MiB/s   375.8 MiB/s
    serpent-cbc   256b    30.1 MiB/s    33.7 MiB/s
    twofish-cbc   256b    46.0 MiB/s    51.4 MiB/s
        aes-xts   256b   372.4 MiB/s   381.5 MiB/s
    serpent-xts   256b    32.0 MiB/s    34.7 MiB/s
    twofish-xts   256b    49.6 MiB/s    54.8 MiB/s
        aes-xts   512b   355.7 MiB/s   355.5 MiB/s
    serpent-xts   512b    32.7 MiB/s    35.0 MiB/s
    twofish-xts   512b    52.0 MiB/s    54.4 MiB/s

リンク

https://linux-sunxi.org/Cryptographic_Hardware_Accelerators