開く:cryptsetupメモリ不足(「キースロットを開くことができるメモリが不足しています」)

開く:cryptsetupメモリ不足(「キースロットを開くことができるメモリが不足しています」)

バージョン 2.3.2 の cryptsetup を含む yocto ディストリビューションを開発しています。

1GB RAMのマザーボードでこれらのディストリビューションを実行していて、正しくデバッグされない暗号化パーティションを開こうとすると、「メモリ不足」エラーが発生します。どんなアイデアがありますか?

私のディストリビューションは、3つのパーティションを持つmSDで実行されます。 3番目(30MB)は暗号化されています。

使ったArchLinuxガイドに記載されている手順ext4の代わりにext3を使用したパーティションの暗号化

# cryptsetup -y -v luksFormat /dev/sda2
# cryptsetup open /dev/sda2 cryptroot
# mkfs.ext3 /dev/mapper/cryptroot

ただし、マザーボードのパーティションを開こうとするとエラーが発生します。

cryptsetup --debug open /dev/mmcblk0p3  cryptroot
# cryptsetup 2.3.2 processing "cryptsetup --debug open /dev/mmcblk0p3 cryptroot"
# Running command open.
# Locking memory.
# Installing SIGINT/SIGTERM handler.
# Unblocking interruption on signal.
# Allocating context for crypt device /dev/mmcblk0p3.
# Trying to open and read device /dev/mmcblk0p3 with direct-io.
# Initialising device-mapper backend library.
# Trying to load any crypt type from device /dev/mmcblk0p3.
# Crypto backend (OpenSSL 1.1.1k  25 Mar 2021) initialized in cryptsetup library version 2.3.2.
# Detected kernel Linux 4.1.35-rt41 ppc.
# Loading LUKS2 header (repair disabled).
# Acquiring read lock for device /dev/mmcblk0p3.
# Opening lock resource file /run/cryptsetup/L_179:3
# Verifying lock handle for /dev/mmcblk0p3.
# Device /dev/mmcblk0p3 READ lock taken.
# Trying to read primary LUKS2 header at offset 0x0.
# Opening locked device /dev/mmcblk0p3
# Veryfing locked device handle (bdev)
# LUKS2 header version 2 of size 16384 bytes, checksum sha256.
# Checksum:43e122216ab19330fdfb6d2f9d7b586c4e5189884aef24be884e7159228e9ee5 (on-disk)
# Checksum:43e122216ab19330fdfb6d2f9d7b586c4e5189884aef24be884e7159228e9ee5 (in-memory)
# Trying to read secondary LUKS2 header at offset 0x4000.
# Reusing open ro fd on device /dev/mmcblk0p3
# LUKS2 header version 2 of size 16384 bytes, checksum sha256.
# Checksum:4ed9a44c22fde04c4b59a638c20eba6da3a13e591a6a1cfe7e0fec4437dc14cc (on-disk)
# Checksum:4ed9a44c22fde04c4b59a638c20eba6da3a13e591a6a1cfe7e0fec4437dc14cc (in-memory)
# Device size 32505856, offset 16777216.
# Device /dev/mmcblk0p3 READ lock released.
# Only 1 active CPUs detected, PBKDF threads decreased from 4 to 1.
# Not enough physical memory detected, PBKDF max memory decreased from 1048576kB to 255596kB.
# PBKDF argon2i, time_ms 2000 (iterations 0), max_memory_kb 255596, parallel_threads 1.
# Activating volume cryptroot using token -1.
# Interactive passphrase entry requested.
Enter passphrase for /dev/mmcblk0p3:
# Activating volume cryptroot [keyslot -1] using passphrase.
device-mapper: ioctl: 4.31.0-ioctl (2015-3-12) initialised: [email protected]
# dm version   [ opencount flush ]   [16384] (*1)
# dm versions   [ opencount flush ]   [16384] (*1)
# Detected dm-ioctl version 4.31.0.
# Device-mapper backend running with UDEV support enabled.
# dm status cryptroot  [ opencount noflush ]   [16384] (*1)
# Keyslot 0 priority 1 != 2 (required), skipped.
# Trying to open LUKS2 keyslot 0.
# Keyslot 0 (luks2) open failed with -12.
Not enough available memory to open a keyslot.
# Releasing crypt device /dev/mmcblk0p3 context.
# Releasing device-mapper backend.
# Closing read only fd for /dev/mmcblk0p3.
# Unlocking memory.
Command failed with code -3 (out of memory).

ベストアンサー1

LUKS2 目的アルゴン2iキー派生機能はメモリハードです。つまり、GPUを使用した無差別攻撃を防止(または少なくとも困難にする)には、デバイスを開くために多くのメモリが必要です。デバイスを開くのに必要なメモリ量を確認できます。以下の行をcryptsetup luksDump /dev/sda2見つけてください。Memory: 755294Keyslots

デバイスを作成するときにcryptsetup使用可能なメモリ量を確認し、それに応じて開くのに必要なメモリ量を調整します。ただし、LUKSデバイスを別のコンピュータで作成する場合(デスクトップでSDカードをフォーマットするなど)、または同じデバイスでも可能です。マシンにはより多くのメモリがあります。現在メモリが不足している可能性があります。この場合、スワップを使用せずにRAMについてのみ話しています。

--pbkdf pbkdf2追加メモリを使用しない「古い」(LUKS1のデフォルト)キー派生関数PBKDF2に切り替えるには、LUKSデバイスを再作成することをお勧めします。または、--pbkdf-memory <num>デフォルトのArgon2iメモリ量を強制的に減らす方法を使用できます。

おすすめ記事