2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetBSDAdvent Calendar 2024

Day 4

NetBSD-10で追加されたSWAP領域暗号化機能

Posted at

NetBSD Advent Calendar 2024 4日目の記事です。今日はNetBSD-10でSWAP領域に追加された機能を紹介しようと思います。

SWAP領域の暗号化がデフォルトで有効化された

NetBSD-10における、(NetBSD-9.3からの)追加・変更箇所を見ると以下のような記述がありました。

Swap encryption is now automatic using the vm.swap_encrypt=1 sysctl(8) variable.

どうやらSWAP領域の暗号化がデフォルトで有効化されたようです。sysctl(8)vm.swap_encrypt というMIB(Management Information Base)エントリが追加されています。

$ sysctl -d vm.swap_encrypt
vm.swap_encrypt: Encrypt data when swapped out to disk
$
$ sysctl vm.swap_encrypt
vm.swap_encrypt = 1

swapctl(8)からは暗号化が有効・無効なのかは確認できないようですね。
(OSの機能なのでカーネル内で保持している値を確認できる sysctl コマンドを使用してくださいという話なのかと思います)

swapctl -l
Device      1K-blocks     Used    Avail Capacity  Priority
/dev/dk1      1048576        0  1048576     0%    0

カーネルコードを見てみる

SWAP領域の暗号化に関連するカーネルコードを眺めてみます。/usr/src/sys/uvm/uvm_swap.cで必要な機能が実装されています。

sysctl で確認できる vm.swap_encrypt は以下の個所で定義されています。MIBエントリの追加手順は過去の記事で紹介しており、これを参考にコードを読んでみます。

2148 SYSCTL_SETUP(sysctl_uvmswap_setup, "sysctl uvmswap setup")
2149 {
2150
2151     sysctl_createv(clog, 0, NULL, NULL,
2152         CTLFLAG_PERMANENT|CTLFLAG_READWRITE, CTLTYPE_BOOL, "swap_encrypt",
2153         SYSCTL_DESCR("Encrypt data when swapped out to disk"),
2154         NULL, 0, &uvm_swap_encrypt, 0,
2155         CTL_VM, CTL_CREATE, CTL_EOL);
2156 }

sysctl_createv(9)の第11引数に指定している &uvm_swap_encrypt で暗号化の有無を設定するようです。 &uvm_swap_encryptbool 型の変数で、さらに VMSWAP_DEFAULT_PLAINTEXT というマクロで条件コンパイルされています。

 214 #if VMSWAP_DEFAULT_PLAINTEXT
 215 bool uvm_swap_encrypt = false;
 216 #else
 217 bool uvm_swap_encrypt = true;
 218 #endif

アーキテクチャ毎のSWAP領域暗号化

VMSWAP_DEFAULT_PLAINTEXT について調べてみましょう。いくつかのアーキテクチャにおいて、カーネルコンフィグ中で設定されているようです。どうやら全てのアーキテクチャでSWAP領域の暗号化が有効になるわけではなさそうです。

$ find /usr/src/sys/arch/ -type f \
    | grep conf/std \
    | xargs grep VMSWAP_DEFAULT_PLAINTEXT
/usr/src/sys/arch/alpha/conf/std.alpha:options          VMSWAP_DEFAULT_PLAINTEXT
/usr/src/sys/arch/cobalt/conf/std.cobalt:options                VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/evbppc/conf/std.explora:options       VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/hpcarm/conf/std.hpcarm:options        VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/hpcmips/conf/std.hpcmips:options      VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/m68k/conf/std.m68k:options            VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/playstation2/conf/std.playstation2:options            VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/pmax/conf/std.pmax:options            VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/pmax/conf/std.pmax64:options          VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/sh3/conf/std.sh3:options              VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/shark/conf/std.ofwgencfg:options              VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/shark/conf/std.shark:options          VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/sparc/conf/std.sparc:options          VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
/usr/src/sys/arch/vax/conf/std.vax:options              VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by

NetBSD/hpcmips(MIPSベースのWindowsCEマシン)やNetBSD/sh3(SuperHシリーズへのNetBSDポート)などで VMSWAP_DEFAULT_PLAINTEXT が設定されており、何となく理由が推測できますね…。実際にコンフィグファイルを確認すると、"do not encrypt swap by default (slow cpu)"と理由が書かれていました。

cat /usr/src/sys/arch/sh3/conf/std.sh3
# $NetBSD: std.sh3,v 1.7 2021/06/04 10:46:11 martin Exp $
#
# standard, required NetBSD/sh3 'options'

options         EXEC_ELF32      # exec ELF binaries
options         EXEC_SCRIPT     # exec #! scripts

options         CPU_IN_CKSUM    # use assembler version of cpu_in_cksum()

options         VMSWAP_DEFAULT_PLAINTEXT        # do not encrypt swap by
                                # default (slow cpu)

まとめ

NetBSD-10で有効化されたSWAP領域の暗号化機能について紹介しました。デフォルトで有効になっているとはいえ、一部のアーキテクチャではCPUの計算能力の観点から暗号化が無効化されていました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?