dm-crypt и LUKS2. Целостность данных

Discussion in 'Безопасность и Анонимность' started by altblitz, 1 Aug 2018.

  1. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    Или, на языке оригинала - integrity check.

    Из личного опыта.
    Партиция на HDD с 2015 года - закриптована dm-crypt type=luks.
    В контейнере, как в матрёшке, файловая система btrfs с subvolumes /home, /root и /var.

    Как легко догадаться, работает без единого сбоя на протяжении 3 последних лет. И будет дальше работать.

    Code:
    blitz@inode /etc % sudo cat crypttab                                                                                        :(
    [sudo] password for blitz:
    # Configuration for encrypted block devices.
    # See crypttab(5) for details.
    
    home   PARTUUID=7e0a016b-6006-4b0b-88ec-82fb876c5f4a   none   luks,cipher=aes-xts-plain64:sha512,size=512,timeout=180
    Code:
    blitz@inode /etc % cat fstab
    # Static information about the filesystems.
    # See fstab(5) for details.
    
    # <file system> <dir> <type> <options> <dump> <pass>
    # /dev/sda5 LABEL=Linux
    PARTUUID=ххх-ххх-ххх-ххх    /                    f2fs    rw,noatime,lazytime,background_gc=on,no_heap,inline_xattr,inline_data,inline_dentry,flush_merge,extent_cache,mode=adaptive,active_logs=6    0 0
    
    # /dev/sda2
    PARTUUID=ххх-ххх-ххх-ххх    /boot                vfat    rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro    0 2
    
    # /dev/mapper/home LABEL=Root
    UUID=ххх-ххх-ххх-ххх        /root    btrfs    rw,relatime,autodefrag,space_cache,subvol=root    0 0
    
    # /dev/mapper/home LABEL=Home
    UUID=ххх-ххх-ххх-ххх        /home/blitz    btrfs    rw,relatime,autodefrag,space_cache,subvol=home    0 0
    
    # /dev/mapper/home LABEL=Var
    UUID=ххх-ххх-ххх-ххх        /var                btrfs    rw,relatime,autodefrag,space_cache,subvol=var    0 0
    
    # Windows Users
    PARTUUID=ххх-ххх-ххх-ххх    /home/blitz/Users    ntfs-3g    rw,nosuid,nodev,noatime,nodiratime,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,async,big_writes    0 0
    В декабре 2017, вышла версия LUKS2.
    Важное и главное в новой версии:
    1. Поддержка размера логических секторов 4096 байт. Прежнее, 512 байт снижало скорость с современными носителями от 1 Терабайт и более.
    2. Поддержка integrity check - целостности данных, с использование journal операций записи на девайсе, HDD или SDD. Реализовано с алгоритмом hmac-sha512, одним из самых криптоустойчивых на сегодня.

    Итак, спустя добрых полгода после выхода кардинально новой версии, делаем backup HDD.
    С размером сектора 4096 байт и проверкой on-the-fly целостности данных.

    Code:
    blitz@inode ~ % sudo cryptsetup -v --cipher aes-xts-plain64 --key-size 512 --hash sha512 --use-random --verify-passphrase --type luks2 --integrity hmac-sha512 --sector-size 4096 --label Backup --pbkdf argon2id --pbkdf-force-iterations 16 --pbkdf-memory 1048576 --pbkdf-parallel 1 --timeout 60 luksFormat /dev/sdd1
    
    WARNING!
    ========
    This will overwrite data on /dev/sdd1 irrevocably.
    
    Are you sure? (Type uppercase yes): YES
    Enter passphrase for /dev/sdd1:
    Verify passphrase:
    Wiping device to initialize integrity checksum.
    You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).
    Progress:  24.3%, ETA 1049:00, 911681 MiB written, speed  45.2 MiB/s
    Process длительный. HDD 4TB - сутки.
    --type luks2 - выбирается новый luks2 формат
    --integrity hmac-sha512 - инициализируется check-sum всего HDD, поэтому длительный процесс
    --sector-size 4096 - размер сектора для объёмных носителей инфо

    Завтра, форматирование закончится и начнётся rsync на криптованный LUKS2 HDD контейнер.
    С btrfs sub-volumes, для ясности и удобства поддержания архива в должном порядке.

    Итак, снова к нашим баранам.
    Проверка 24-часового форматирования LUKS2 с data integrity.

    Code:
    blitz@inode ~ % sudo cryptsetup luksDump /dev/sdd1                                                                                      :(
    [sudo] password for blitz:
    LUKS header information
    Version:           2
    Epoch:             3
    Metadata area:     12288 bytes
    UUID:              xxx-xxx-xxx-xxx-xxx
    Label:             Backup
    Subsystem:         (no subsystem)
    Flags:           (no flags)
    
    Data segments:
      0: crypt
        offset: 4194304 [bytes]
        length: (whole device)
        cipher: aes-xts-plain64
        sector: 4096 [bytes]
        integrity: hmac(sha512)
    
    Keyslots:
      0: luks2
        Key:        1024 bits
        Priority:   normal
        Cipher:     aes-xts-plain64
        PBKDF:      argon2id
        Time cost:  16
        Memory:     1048576
        Threads:    1
        Salt:       7f 5a 64 50 c5 6a 13 51 24 10 a2 a7 10 c6 5b 05
                    e4 87 09 aa c2 80 40 42 39 41 ef 23 b3 e7 92 5d
        AF stripes: 4000
        Area offset:32768 [bytes]
        Area length:512000 [bytes]
        Digest ID:  0
    Tokens:
    Digests:
      0: pbkdf2
        Hash:       sha256
        Iterations: 1000
        Salt:       b7 41 69 4f 2b 72 1b 63 93 86 81 34 bb 8b 78 75
                    04 bc da 06 6e f2 3b a2 d6 ce 78 77 00 5d d8 69
        Digest:     42 b5 1a b2 7a 38 e7 e2 44 3e ec 1b 93 ae 36 fb
                    71 e4 28 f6 ed e1 a3 f9 62 ec 2d 52 56 15 0e e7 
    Нра. Просто и безукоризненно, арийский стандарт качества.
    Теперь, открываем криптованный /dev/sdd1 и форматируем его в btrfs. С sub-volumes.

    Интересный момент.
    Kлавиша Enter на самой клавиатуре и клавиша Enter на цифровом со стрелками справа - суть совсем разные коды для cryptsetup.

    Code:
    blitz@inode ~ % sudo cryptsetup open /dev/sdd1 backup
    [sudo] password for blitz:
    Enter passphrase for /dev/sdd1:
    No key available with this passphrase.
    Enter passphrase for /dev/sdd1:
    sudo cryptsetup open /dev/sdd1 backup  47.34s user 0.62s system 49% cpu 1:36.44 total
    blitz@inode ~ % lsblk -f
    NAME           FSTYPE      LABEL    UUID                                 MOUNTPOINT
    sda                                                                     
    ├─sda1         ntfs        Recovery 12DC681DDC67F97D                     
    ├─sda2         vfat                 xxx-xxx-xxx-xxx                            /boot
    ├─sda3                                                                   
    ├─sda4         ntfs                 xxx-xxx-xxx-xxx                     
    └─sda5         f2fs        Linux     xxx-xxx-xxx-xxx /
    sdb                                                                     
    ├─sdb1         ntfs        Users    B4069F43069F0610                     /home/blitz/Users
    └─sdb2         crypto_LUKS           xxx-xxx-xxx-xxx
      └─home       btrfs       Home      xxx-xxx-xxx-xxx /home/blitz/backup
    sdd                                                                     
    └─sdd1         crypto_LUKS Backup   xxx-xxx-xxx-xxx
      └─backup_dif                                                           
        └─backup                                                             
    
    Дальше - проще и быстрей.
    монтируется /dev/mapper/backup и форматируется btrfs.

    Созданная btrfs партиция монтируется. С опцией nodatacow. Многие, по опыту предпочитают именно эту опцию.

    Code:
    blitz@inode /tmp % mkdir /tmp/backup
    blitz@inode /tmp % sudo mount -o nodatacow /dev/mapper/backup /tmp/backup
    
    И создаются sub-volumes для архивации данных.

    Code:
    blitz@inode /tmp % sudo btrfs subvolume create /tmp/backup/data                                                                         :(
    Create subvolume '/tmp/backup/data'
    blitz@inode /tmp % sudo btrfs subvolume create /tmp/backup/documents
    Create subvolume '/tmp/backup/documents'
    blitz@inode /tmp % sudo btrfs subvolume create /tmp/backup/music     
    Create subvolume '/tmp/backup/music'
    blitz@inode /tmp % sudo btrfs subvolume create /tmp/backup/pictures
    Create subvolume '/tmp/backup/pictures'
    blitz@inode /tmp % sudo btrfs subvolume create /tmp/backup/videos 
    Create subvolume '/tmp/backup/videos'
    
    ВСЁ! сделано.
     
    #1 altblitz, 1 Aug 2018
    Last edited by a moderator: 4 Aug 2018
    dmax0fw likes this.
  2. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    Злободневно - как сегодня, так и завтра.
    Рекомендуется. Требуется даже - сделать компиляцию, для личного использования, программы dm-crypt с CPU поддержкой HW/hardware реализации ЦПУ алгоритма AES.

    CPU intel/amd aes-ni instructions поддерживают следующие процессоры:
    https://en.wikipedia.org/wiki/AES_instruction_set#Intel