icon-attention デザイン新しくしました。

icon-calendar 2019年8月26日

【CentOS7】IoTのための暗号化デバイスの作り方

暗号化デバイスの作成の流れ

  1. 必要ソフトのインストール(cryptsetup、dumpなど)
  2. 暗号化デバイス用のパーティションを作成(parted)
  3. 暗号化の設定をし暗号化ファイルシステムをマウント

1.必要ソフトのインストール

作業のため管理者権限が必要となるのでsudo -iなどを実行して
root権限でコマンドを打ってください

まずは必要なソフトをインストールしましょう
Ubuntuの場合はaptにしてください

# yum install cryptsetup cryptsetup-libs

 

2.暗号化デバイス用のパーティションを作成

partedコマンドで暗号化するFSを作成します。
まずはどのディスクにパーティションを作成するか決めます。
lsblkでデバイス名を確認し作りたいディスクを決めてください

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
  sda1            8:1    0    1G  0 part /boot
  sda2            8:2    0   19G  0 part
    centos-root 253:0    0   17G  0 lvm  /
    centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.3G  0 rom

 

今回はsdaのディスクに作成します。

以下のコマンドを打ち込むとGNU Partedのウィザードが起動するのでここで操作します

# parted /dev/sda

printで現在のパーティションの情報が見れます

(parted) print
モデル: VMware, VMware Virtual S (scsi)
ディスク /dev/sda: 32.2GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  xfs               boot
 2    1075MB  21.5GB  20.4GB  primary                    lvm

次にmkpartでパーティションの作成を行います。
今回は簡単にディスクの最後に追加しますが、
メインのパーティションの拡張性を考えたい場合は
1-boot, 2-暗号化FS, 3-メイン
となるような構造にするといいです。

(parted) mkpart
パーティションの種類?  primary/プライマリ/extended/拡張? primary
ファイルシステムの種類?  [ext2]? ext3
開始? 21.6GB
終了? 22.6GB

 

日本語になってて見づらいですが、

  1. パーティションをprimaryにするかextendedにするか
  2. FSを何にするか
  3. パーティションの開始位置
  4. パーティションの終了位置

を聞かれています。
今回は1GB分の暗号化FSを作成したいので 終了位置-開始位置=1GB となるように設定しました。

printと打ち込むとパーティションが作成されていると思います。
確認ができたら、qと打ちこんでpartedを抜けてください

3.暗号化の設定をし暗号化FSをマウント

次にcryptsetupコマンドで暗号化設定をしていきます。
手順は以下の通りです。

  1. 暗号化するパーティション名を確認
  2. 暗号化
  3. 認証してマウント

まずはlsblkで先ほど作成したパーティション名を確認します。

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
  sda1            8:1    0    1G  0 part /boot
  sda2            8:2    0   19G  0 part
    centos-root 253:0    0   17G  0 lvm  /
    centos-swap 253:1    0    2G  0 lvm  [SWAP]
  sda3            8:3    0    1G  0 part
sr0              11:0    1  4.3G  0 rom

 

sda3を暗号化します。

# cryptsetup luksFormat /dev/sda3

WARNING!
========
This will overwrite data on /dev/sda3 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/sda3:
Verify passphrase:

確認がでますが英語の指示通り大文字でYESと入力してください。
その後パスワードの入力が求められますが、これは
rootパスのような扱いなのでバレないようなパスワードにしてください。

これでsda3を暗号化できたので認証してみます。

luksOpenで認証できます。
認証が成功したら /dev/mapper/デバイス名 とデバイスとして表示されるようになります。
今回はhimitsuという名前を付けたいので /dev/mapper/himitsuとなります。

# cryptsetup luksOpen /dev/sda3 himitsu
Enter passphrase for /dev/sda3:
# ls /dev/mapper
centos-root  centos-swap  control  himitsu

あとは/mntなどにディレクトリを作成するなどしてそこにマウントしてください。

# mkdir /mnt/himitsu
# mount -w /dev/mapper/himitsu /mnt/himitsu

 

これで作業は完了ですが、luksAddKeyで鍵を追加できるのでこれを利用して
IoT機器のハードウェア情報から生成した鍵を使うことでコピーガードをしたりできます。

マウントした場所に暗号化したいファイルやプログラム置き、起動時に
ハードウェア情報(MACアドレスなど)を取得して公開鍵を生成し認証などができたら
製品として売りやすいですしIoT界隈で必須技術になりそうですね!