[f466994fa8721f70712164aaf67333102b2d08ac] #bsd 

Greg Kroah-Hartman советует BSD

https://old.reddit.com/r/linux/comments/2ny1lz/im_greg_kroahhartman_linux_kernel_developer_ama/
В 5b0eaa9eaff24f3d5cd0bf298f3a345ecc9d9687 я уже читал его "ask me
anything", но не заметил:

    > What's your thought on the BSD Kernel? Is there anything they do
      that you wish the Linux kernel did?
    < I love the BSDs, they have some great code and developers. If that
      operating system works for you, great, use it!

Если вам BSD подходит, то используйте! Я понимаю что ответ то на самом
деле про то что: используй что нравится, но я для себя его притягиваю за
уши, потому что большинству людей BSD подойдут, и Грэг считает что надо
использовать в этом случае :-)

[оставить комментарий]
комментарий 0:
From: allehandro69_spain (moderated by stargrave)
Date: 2021-06-15 08:43:56Z

[куча всякого неконструктивного срача между мной и троллем,
размещавшим текст на сторонних ресурсах]
Претензией было отсутствие из коробки возможности делать GELI
без сохранения метаинформации на диске.
комментарий 1:
From: kmeaw
Date: 2021-06-16 13:31:40Z

> гели неунивесален и ограничен

Я почти не знаю FreeBSD, но быстрый эксперимент, чтение докуметнации и
g_eli.c показывают, что ограничение заключается лишь в том, что
метаданные хранятся в последнем 512-байтном секторе.

Раз вы смогли разобраться с device-mapper в Linux, то будет несложно
провернуть следующий трюк - создать md размером 512 байт, записать туда
правильный заголовок и приклеить его к диску с помощью gconcat.

pahole подсказывает:

struct g_eli_metadata {
        char                       md_magic[16];         /*     0    16 */
        uint32_t                   md_version;           /*    16     4 */
        uint32_t                   md_flags;             /*    20     4 */
        uint16_t                   md_ealgo;             /*    24     2 */
        uint16_t                   md_keylen;            /*    26     2 */
        uint16_t                   md_aalgo;             /*    28     2 */
        uint64_t                   md_provsize;          /*    30     8 */
        uint32_t                   md_sectorsize;        /*    38     4 */
        uint8_t                    md_keys;              /*    42     1 */
        int32_t                    md_iterations;        /*    43     4 */
        uint8_t                    md_salt[64];          /*    47    64 */
        /* --- cacheline 1 boundary (64 bytes) was 47 bytes ago --- */
        uint8_t                    md_mkeys[384];        /*   111   384 */
        /* --- cacheline 7 boundary (448 bytes) was 47 bytes ago --- */
        u_char                     md_hash[16];          /*   495    16 */

        /* size: 511, cachelines: 8, members: 13 */
        /* last cacheline: 63 bytes */
} __packed;

То есть заголовок необязательно запоминать целиком. Достаточно правильно
заполнить все служебные поля, а затем (например, с помощью openssl)
посчитать HMAC(SHA512, key, "\0") и записать остальные поля. Последние
17 байт получаются из MD5(data)||"\0", где data - всё то, что мы уже
посчитали.

После этого делаем geli restore на gconcat, и можно подключать
зашифрованный диск. С помощью gnop и gconcat можно повторить эту
процедуру и для вложенных контейнеров по известному смещению.

Да, неудобно, но разве это остановит настоящего шифропанка? Заодно и
deniability чуть возрастёт - раз geli такой ограниченный, то меньше
шансов, что кто-то будет подозревать о наличии вложенного
криптоконтейнера. И устанавливать никакой дополнительный софт не нужно -
всё уже есть в базовой системе.