[О блоге] [наверх] [пред] [2021-06-14 16:56:41+03:00] [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 такой ограниченный, то меньше
    шансов, что кто-то будет подозревать о наличии вложенного
    криптоконтейнера. И устанавливать никакой дополнительный софт не нужно -
    всё уже есть в базовой системе.