Подскажите хорошую схему шифрованиия

Добрый день сообщество ArchLinux!
Я бы хотел узнать о самом современном способе шифрования системы и данных, которые находятся на моём жёстком диске.
Недавно я прочитал и успешно реализовал способ, который был описан в этой статье на Хабр'е
Хотел бы узнать мнение сообщества и людей, которые разбираются в данной теме:
1. На сколько данный способ современен и имеется ли способ лучше?
2. Необходимо ли выполнять операцию sudo dd if=/dev/urandom of=/dev/sda2 bs=2M и для чего он нужен?
3. cryptsetup -v luksFormat /dev/sda2, какой вид шифрования выбрать?
4. Как возможно улучшить способ из статьи Хабра?

Всем добра!
Спасибо!
Ну вот откуда такая мания шифровать диск. Статьи пишут не спецы по защите информаци, а простые юзеры и с одной целью - что то написать.
Еще не приходилось сталкиваться со специалистами, которые рекомендуют шифровать диск. Если есть желание что-то спрятать или ограничить доступ используют более ухищренные способы.
Ошибки не исчезают с опытом - они просто умнеют
vasek
Ну вот откуда такая мания шифровать диск. Статьи пишут не спецы по защите информаци, а простые юзеры и с одной целью - что то написать.
Еще не приходилось сталкиваться со специалистами, которые рекомендуют шифровать диск. Если есть желание что-то спрятать или ограничить доступ используют более ухищренные способы.
Это не мания шифрования:D
Я просто провожу исследование для лабораторной работы в университете, тема шифрование, я выбрал для себя под тему шифрования систем linux, провёл практическое исследование и у меня остались небольшие пробелы для полного усвоения темы.
Вот и решил создать данную тему, возможно кого-то тоже интересует данная область. Про подписку загрузчика и защиты его от подмены и Secure Boot режим в современных материнских платах
SkyRewir
Я просто провожу исследование для лабораторной работы в университете, тема шифрование …
Если исследование, то должно быть приведено сравнение методов шифрования (немного есть в Wiki). А если это безопасность, то способы шифрования всем известны и все хорошо описано, нет смысла повторять это.
А вот защита, точнее скрытие следов шифрования, это намного важнее.
И вообще, если занялся безопасностью, то должен знать, что защита должна быть комплексная. И если, например, используешь шифрование, то ничто не должно выдавать, что ты применил шифрование. Ну не должно быть даже намека на это.
Привожу пример. Создал зашифрованную директорию, точнее файл-контейнер, размером 100М, накидал туда файлов с важной информацией. Но нужно сделать все так, чтобы даже не было и намека, что это зашифрованный файл-контейнер, а спецы в этой области (средние) не смогли определить это даже по сигнатуре файла. Что я и сделал, скрыл следы шифрования.
И так, имеется зашифрованная директория - файл-контейнер video.mp4 рзмером 100М.
Смотрим проверяем/анализируем
ls ~/TTT/TEMP/video.mp4
/home/vasek/TTT/TEMP/video.mp4

du ~/TTT/TEMP/video.mp4
102408 /home/vasek/TTT/TEMP/video.mp4

file ~/TTT/TEMP/video.mp4
/home/vasek/TTT/TEMP/video.mp4: ISO Media, MP4 v2 [ISO 14496-14]
и убеждаемся, что это действительно mp4.
Пробуем запустить
mpv ~/TTT/TEMP/video.mp4
…. не получается - файл испорчен (не найден atom moov и др.) … жалко, не посмотрели.
И никто и не подумает, что это зашифрованная директория.

EDIT 1 - почему важно скрыть следы шифрования? Если нам в руки попал работающий комп или ушедший в suspend и если в нем уже монтировали зашифрованный объект, то узнать пароль ничего не стоит - все следы находятся в памяти, снял дамп и анализируй - утилиты для этого имеются. А потому сейчас все новые проги, которые оперируют с паролями, снабжают оябязательной фичей, стирающей в памяти примененные пароли (находящиеся по определенным адресам). И другие причины - а потому лучше скрывать следы шифрования.

EDIT 2 - пример еще одного способа спрятать информацию - LVM на нескольких физических дисках
Ошибки не исчезают с опытом - они просто умнеют
vasek
Если исследование, то должно быть приведено сравнение методов шифрования (немного есть в Wiki). А если это безопасность, то способы шифрования всем известны и все хорошо описано, нет смысла повторять это.
Почему нет смысла повторять?
Вот пример из WIKI
AES | 128 bits |128, 192 or 256 bits| approved by the NSA for protecting "SECRET" and "TOP SECRET" classified US-government information (when used with a key size of 192 or 256 bits)
Одобренный Агенством Национальной Безопасности для защиты информации правительства США, классифицированной как "СЕКРЕТНО" и "СОВЕРШЕННО СЕКРЕТНО"
Из этой информации стоит сделать вывод, что наиболее современный и безопасный шифр это AES, но в дополнении к этому можно сделать вывод, что правительствами разных стран проводятся исследования для взлома данного шифра как наиболее распространённого, в отличии к примеру от менее распространённого шифра "Кузнечик", который прописан в ГОСТ'ах в качестве стандарта РФ Кузнечик.
Подведём небольшой вывод:
Современные стандарты шифрования имеют AES подобную структуру.
К сравнению
Шифр |Длинна ключа |Размер ключа |Число раундов
AES | 128bit |128, 192, 256 бит | 10, 12, 14 (зависит от размера ключа)
Kuznechik | 128bit |256 бит | 10
Я читал статью, к сожалению ссылку не нашел, что для взлома цифрового 6-ти значного ключа, который зашифрован AES, потребуется около полутора месяца (вне лабораторных условиях). Что делает его "на данное время" одним из самых криптостойких. Но все может измениться с появление квантовых компьютеров. Выдержка сделана на память.

vasek
И вообще, если занялся безопасностью, то должен знать, что защита должна быть комплексная. И если, например, используешь шифрование, то ничто не должно выдавать, что ты применил шифрование.
С тем, что защита должна быть комплексной я полностью согласен-это основополагающий фактор безопасности.
Для шифрования системы, с текущими знаниями на ум приходит только метод Правдоподобного отрицания. Или метод контейнера с двойным дном.
Как я это вижу

root@archiso ~ # lsblk
NAME                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                         7:0    0 474.1M  1 loop  /run/archiso/sfs/airootfs
sda                           8:0    0    20G  0 disk
├─sda1                        8:1    0   512M  0 part
└─sda2                        8:2    0  19.5G  0 part
  ├─wrapper-FakeSystem      254:0    0     8G  0 lvm
  │ └─FakeSystem            254:2    0     8G  0 crypt
  │   ├─FakeSystemRoot-swap 254:4    0     1G  0 lvm
  │   ├─FakeSystemRoot-root 254:5    0     5G  0 lvm
  │   └─FakeSystemRoot-home 254:6    0     2G  0 lvm
  └─wrapper-TrueSystem      254:1    0  11.5G  0 lvm
    └─TrueSystem            254:3    0  11.5G  0 crypt
      ├─TrueSystemRoot-swap 254:7    0     1G  0 lvm
      ├─TrueSystemRoot-root 254:8    0     5G  0 lvm
      └─TrueSystemRoot-home 254:9    0   5.5G  0 lvm
sr0                          11:0    1   586M  0 rom   /run/archiso/bootmnt
sr1                          11:1    1  1024M  0 rom
Вот пример кода

fdisk /dev/sda

#Разбиваем диск на 2 раздела
#sda1 раздел для /boot у меня UEFI

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-41943006, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006, default 41943006): +512M

Created a new partition 1 of type 'Linux filesystem' and of size 512 MiB.
Partition #1 contains a vfat signature.

Do you want to remove the signature? [Y]es/[N]o: Yes

The signature will be removed by a write command.

Command (m for help): t
Selected partition 1
Partition type (type L to list all types): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.

#sda2 системный раздел

Command (m for help): n
Partition number (2-128, default 2):
First sector (1050624-41943006, default 1050624):
Last sector, +sectors or +size{K,M,G,T,P} (1050624-41943006, default 41943006):

Created a new partition 2 of type 'Linux filesystem' and of size 19.5 GiB.

#Записываем

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Проверяем, что получилось

root@archiso ~ # lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 474.1M  1 loop /run/archiso/sfs/airootfs
sda      8:0    0    20G  0 disk
├─sda1   8:1    0   512M  0 part
└─sda2   8:2    0  19.5G  0 part
sr0     11:0    1   586M  0 rom  /run/archiso/bootmnt
sr1     11:1    1  1024M  0 rom
Подготовка раздела sda1

#Раздел sda1 форматируем в FAT32
root@archiso ~ # mkfs.vfat /dev/sda1
mkfs.fat 4.1 (2017-01-24)
Подготовка раздела sda2 для "Контейнера с двойным дном", возможно я делаю это не правильно, это только моя догадка

#Инициализация физического LVM раздела
root@archiso ~ # pvcreate /dev/sda2
  Physical volume "/dev/sda2" successfully created.

#Создание группы разделов LVM
root@archiso ~ # vgcreate wrapper /dev/sda2
  Volume group "wrapper" successfully created

#Создаём два логических раздела
##Для ложной системы
lvcreate -L8G -n FakeSystem wrapper
  Logical volume "FakeSystem" created.

##Для настоящей системы
lvcreate -l100%FREE -n TrueSystem wrapper
  Logical volume "TrueSystem" created.

#Проверяем, что получилось
root@archiso ~ # lsblk
NAME                   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                    7:0    0 474.1M  1 loop /run/archiso/sfs/airootfs
sda                      8:0    0    20G  0 disk
├─sda1                   8:1    0   512M  0 part
└─sda2                   8:2    0  19.5G  0 part
  ├─wrapper-FakeSystem 254:0    0     8G  0 lvm
  └─wrapper-TrueSystem 254:1    0  11.5G  0 lvm
sr0                     11:0    1   586M  0 rom  /run/archiso/bootmnt
sr1                     11:1    1  1024M  0 rom
Затем мы шифруем логические разделы

#Шифруем логический раздел с ложной системой
root@archiso ~ # cryptsetup -v luksFormat /dev/mapper/wrapper-FakeSystem

WARNING!
========
This will overwrite data on /dev/mapper/wrapper-FakeSystem irrevocably.

Are you sure? (Type uppercase yes): YES #Подтверждаем
Enter passphrase for /dev/mapper/wrapper-FakeSystem: #Придумываем пароль
Verify passphrase: #Подтверждаем пароль
Key slot 0 created.
Command successful.

#Шифруем логический раздел с настоящей системой
root@archiso ~ # cryptsetup -v luksFormat /dev/mapper/wrapper-TrueSystem    :(

WARNING!
========
This will overwrite data on /dev/mapper/wrapper-TrueSystem irrevocably.

Are you sure? (Type uppercase yes): YES #Подтверждаем
Enter passphrase for /dev/mapper/wrapper-TrueSystem: #Придумываем пароль
Verify passphrase:  #Подтверждаем пароль
Key slot 0 created.
Command successful.
Открываем наши LUKS-контейнеры

#Для ложной системы
root@archiso ~ # cryptsetup luksOpen /dev/mapper/wrapper-FakeSystem FakeSystem
Enter passphrase for /dev/mapper/wrapper-FakeSystem: #Пароль от ложной системы

#Для настоящей системы
root@archiso ~ # cryptsetup luksOpen /dev/mapper/wrapper-TrueSystem TrueSystem
Enter passphrase for /dev/mapper/wrapper-TrueSystem: #Пароль от настоящей системы
Подготовка зашифрованных LUKS-контейнеров

#Инициализируем физические LVM разделы для LUKS-контейнеров
##Для ложной системы
root@archiso ~ # pvcreate /dev/mapper/FakeSystem
  Physical volume "/dev/mapper/FakeSystem" successfully created.

##Для настоящей системы
root@archiso ~ # pvcreate /dev/mapper/TrueSystem
  Physical volume "/dev/mapper/TrueSystem" successfully created.

#Создаём группу разделов LVM для "Ложной системы" и "Настоящей системы"
##Для ложной системы
root@archiso ~ # vgcreate FakeSystemRoot /dev/mapper/FakeSystem
  Volume group "FakeSystemRoot" successfully created
##Для настоящей системы
root@archiso ~ # vgcreate TrueSystemRoot /dev/mapper/TrueSystem
  Volume group "TrueSystemRoot" successfully created

#Создание логических разделов для "Ложной системы" и "Настоящей системы"
##Для ложной системы
###Создаём раздел swap
root@archiso ~ # lvcreate -L1G -n swap FakeSystemRoot
  Logical volume "swap" created.
###Создаём раздел root
root@archiso ~ # lvcreate -L5G -n root FakeSystemRoot
  Logical volume "root" created.
###Создаём раздел home
root@archiso ~ # lvcreate -l100%FREE -n home FakeSystemRoot
  Logical volume "home" created.

##Для настоящей системы
###Создаём раздел swap
root@archiso ~ # lvcreate -L1G -n swap TrueSystemRoot
  Logical volume "swap" created.
###Создаём раздел root
root@archiso ~ # lvcreate -L5G -n root TrueSystemRoot
  Logical volume "root" created.
###Создаём раздел home
root@archiso ~ # lvcreate -l100%FREE -n home TrueSystemRoot
  Logical volume "home" created.
В результате у меня образовалась такая структура

root@archiso ~ # lsblk
NAME                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                         7:0    0 474.1M  1 loop  /run/archiso/sfs/airootfs
sda                           8:0    0    20G  0 disk
├─sda1                        8:1    0   512M  0 part
└─sda2                        8:2    0  19.5G  0 part
  ├─wrapper-FakeSystem      254:0    0     8G  0 lvm
  │ └─FakeSystem            254:2    0     8G  0 crypt
  │   ├─FakeSystemRoot-swap 254:4    0     1G  0 lvm
  │   ├─FakeSystemRoot-root 254:5    0     5G  0 lvm
  │   └─FakeSystemRoot-home 254:6    0     2G  0 lvm
  └─wrapper-TrueSystem      254:1    0  11.5G  0 lvm
    └─TrueSystem            254:3    0  11.5G  0 crypt
      ├─TrueSystemRoot-swap 254:7    0     1G  0 lvm
      ├─TrueSystemRoot-root 254:8    0     5G  0 lvm
      └─TrueSystemRoot-home 254:9    0   5.5G  0 lvm
sr0                          11:0    1   586M  0 rom   /run/archiso/bootmnt
sr1                          11:1    1  1024M  0 rom
Дальше необходимо отформатировать разделы и установить две системы "Ложную" и "Настоящую"
Примерно такую схему я составил, но возник вопросы:
1.Возможно стоит дополнительно шифровать wrapper, а для FakeSystem и TrueSystem создать файл-пароль и в зависимости от того, какой пароль wrapper будет введён при загрузке, подключать файл-ключ нужной системы.
2.Как спрятать "Настоящую систему" от "Ложной системы", чтобы дисковое пространство раздела отображалось полностью, вне зависимости от то размера "Настоящей системы", одно дело, спрятать 100Мб, а другое несколько Гб.
offtop: как по мне так, если есть что прятать. нужно выбрать такую схему которую сможешь обойти, когда с паяльником в попе, вдруг забудешь пароль. социальную инженерию ещё никто не отменял)))
Ошибки в тексте-неповторимый стиль автора©
indeviral
offtop: как по мне так, если есть что прятать. нужно выбрать такую схему которую сможешь обойти, когда с паяльником в попе, вдруг забудешь пароль. социальную инженерию ещё никто не отменял)))
Почему оффтоп? Данный метод тоже существует и применяется "Тук-тук-тук по дереву".
Согласен, не все могут противодействовать Бандитскому криптоанализу при отсутствии должной подготовки и в любом случае пароль придётся сказать, для этого можно использовать метод "Правдоподобного отрицания". Для ложной системы выбрать не очень сложный и при этом не слишком лёгкий пароль, который, при применении к тебе пыток ты не забудешь и сможешь его выдать за истинный.
SkyRewir
AES | 128bit |128, 192, 256 бит | 10, 12, 14 (зависит от размера ключа)
Не понял, что это ??? и это
SkyRewir
для взлома цифрового 6-ти значного ключа, который зашифрован AES, потребуется около полутора месяца
Нужно не верить, что пишут, а считать самому … или я не так что то понял?
Имеем AES 128-bit …. для расшифровки ключа нужно 2*128=3.4x10*38 стадий/раундов переборов.
Пусть имеем комп, позволяющий выполнять 1x10*12 (1 трилион операций в секунду - 1 трилион ключей в секунду) и понадобится примерно 3.4x10*38/10*12/3600/24/365 = 10*19 лет. А если предположить наличие квантовой технологии, обладающей той же пропускной способностью, то понадобится около шести месяцев.
Но есть еще и другие нюансы
1. Теоретически нашли способ (техника двудольного криптоанализа, основанная на удалении двух бит), позволяющяя это делать в 5 раз быстрее.
2. Ключи придумывают люди, и это рушит теорию - чем длиннее ключ, тем устойчивее система. Ну не могут люди придумать безсмысленную фразу и помнить ее - значит ее можно на каком то этапе угадать, а не идти методом перебора.
Отсюда следует вывод - нужно чаще менять ключи.
А вообще согласен с indeviral, все это пишется для студентов и ученых, а практического интереса не представляет.
Компании тратят бешенные бабки на защиту информации, защита многоуровневая, как по рабочим местам, так и по виду/типу/объему информации. А на каком то этапе, при определенных условиях эта информация просто уничтожается за считанные секунды. А та что подлежит сохранности, как backup, наиболее важная, никогда не хранится в одном месте - разнесена на части, у каждой свой пароль и возможно ее восстановленить только при совместном слиянии.
Ошибки не исчезают с опытом - они просто умнеют
SkyRewir
Для ложной системы выбрать не очень сложный и при этом не слишком лёгкий пароль, который, при применении к тебе пыток ты не забудешь и сможешь его выдать за истинный.
Это пришло из КГБ - всегда есть легенда (наполовину правдивая, наполовину ложная), а вместе с ней есть и сублегенда (близко к истине, но уводит в сторону). По сопротивляясь некоторое время, выкладываешь легенду, а сублегенда выкладывается, когда паяльник уже готов к применению. Но те времена прошли - и паяльник не нужен (тратится на электричество, затыкать уши и др.), вколют сыворотку и все раскажешь. Также и с двойным шифрованием - специалист всегда поймет, что у тебя за система. Тот же Truecrypt - вся нужная информация содержится в 512 байтах, притом в двух местах, хотя пишут сигнатуры не имеет (да не имеет, но есть косвенные признаки).

EDIT 1 - подкорректировал неточности, писал поздно, в спешке.
Ошибки не исчезают с опытом - они просто умнеют
indeviral, vasek
Спасибо! Что помогаете мне в освоении темы шифрования устройств.

vasek
Нужно не верить, что пишут, а считать самому … или я не так что то понял?
Да извиняюсь, информация действительно неверная, прочитал другие статьи.

vasek
SkyRewir
AES | 128bit |128, 192, 256 бит | 10, 12, 14 (зависит от размера ключа)

Не понял, что это ???
Здесь я хотел привести сравнение западных и российских стандартов шифрования (Размер ключа, Длинна ключа). На следующей строчке описан шифр "Кузнечик".

Но я бы хотел взять более идеальные условия, где нету человеческого фактора, без применения сывороток правды и пыток:D
Программно-технические возможности и средства реализации.
 
Зарегистрироваться или войдите чтобы оставить сообщение.