Отключение IPv6 приводит к черному экрану при перезагрузке

Ну, я могу это воспроизвести.

# dd count=1 if=/dev/zero | aespipe > aes_zero
Password: Error: Password must be at least 20 characters.
# dd count=1 if=/dev/zero | aespipe >> aes_zero
Password: Error: Password must be at least 20 characters.
# cat aes_zero | aespipe -d | hexdump -C
Password: Error: Password must be at least 20 characters.
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
          ^^
00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400

Зашифрованный текст:

# hexdump -C aes_zero
00000000  b3 a3 72 9b 18 5b 6b 73  e5 48 88 d1 8b 66 e3 10  |..r..[ks.H...f..|
00000010  a8 a0 ee d3 7e 08 91 86  6b f7 30 b2 ea 6a 58 0b  |....~...k.0..jX.|
[...]
000001e0  d9 2a 60 22 c9 4a 37 5c  47 21 65 0a bb f3 a8 7d  |.*`".J7\G!e....}|
000001f0  50 9f ef 38 9a c1 95 2b  ff 85 c7 16 cc 90 a7 18  |P..8...+........|
00000200  b3 a3 72 9b 18 5b 6b 73  e5 48 88 d1 8b 66 e3 10  |..r..[ks.H...f..|
00000210  a8 a0 ee d3 7e 08 91 86  6b f7 30 b2 ea 6a 58 0b  |....~...k.0..jX.|
[...]
000003e0  d9 2a 60 22 c9 4a 37 5c  47 21 65 0a bb f3 a8 7d  |.*`".J7\G!e....}|
000003f0  50 9f ef 38 9a c1 95 2b  ff 85 c7 16 cc 90 a7 18  |P..8...+........|
00000400

Вы уже можете сказать, что это плохая криптография, поскольку зашифрованный текст повторяется, чего вообще не должно происходить.

Также нет ничего плохого в самом зашифрованном тексте:

# dd count=1 if=aes_zero | md5sum
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00136312 s, 376 kB/s
f328ce6ff88545bc803b033561cbdffd  -
# dd count=1 skip=1 if=aes_zero | md5sum
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00148213 s, 345 kB/s
f328ce6ff88545bc803b033561cbdffd  -

Таким образом, это идентично, и во время расшифровки появляется неверный байт.

На самом деле то, что я наивно ожидал, это не отставание на один байт, а случайные данные, следующие за первыми 512 байтами. Так как для большинства обычных схем шифрования IV должен быть разным для каждого сектора, чтобы избежать повторения шифротекста, и результат должен быть совершенно другим.

Шифрование 1024 байт за один раз:

# dd count=2 if=/dev/zero | aespipe >> aes_zero2
Password: Error: Password must be at least 20 characters.
# hexdump -C aes_zero2
00000000  b3 a3 72 9b 18 5b 6b 73  e5 48 88 d1 8b 66 e3 10  |..r..[ks.H...f..|
00000010  a8 a0 ee d3 7e 08 91 86  6b f7 30 b2 ea 6a 58 0b  |....~...k.0..jX.|
...
000001e0  d9 2a 60 22 c9 4a 37 5c  47 21 65 0a bb f3 a8 7d  |.*`".J7\G!e....}|
000001f0  50 9f ef 38 9a c1 95 2b  ff 85 c7 16 cc 90 a7 18  |P..8...+........|
00000200  60 89 3e 37 87 1c 37 31  1a 11 50 b6 99 50 d3 74  |`.>7..71..P..P.t|
00000210  af a9 a2 30 3d e6 72 5f  f3 96 6d 3b 9e 5b 33 6f  |...0=.r_..m;.[3o|
...
000003e0  3f d3 2e 9a 18 ad 7a c9  5a ee 04 99 28 e6 af 3f  |?.....z.Z...(..?|
000003f0  a3 a9 71 be 1a 56 35 01  06 b9 57 dd fc 42 7c 47  |..q..V5...W..B|G|

Как видите, зашифрованный текст совсем не повторяется. Таким образом, ваша конкатенация просто создает неправильный зашифрованный текст (IV, установленный неправильно ), и получение такого большого количества неповрежденного текста независимо от того, является большим сюрпризом и не является хорошей криптографией. Вы не должны иметь возможность переместить зашифрованный текст на другое смещение и получить разумный результат обратно (только с первыми несколькими байтами, затронутыми неправильным IV ).


Попробуйте воспроизвести то же самое с помощью LUKS (aes -xts -plain64):

# truncate -s 1024 luks_zero
# losetup --find --show luks_zero
/dev/loop9
# cryptsetup open --type plain --cipher aes-xts-plain64 /dev/loop9 luks_zero
Enter passphrase for /dev/loop9: Error: Password must be at least 20 characters.
# dd if=/dev/zero of=/dev/mapper/luks_zero
dd: writing to '/dev/mapper/luks_zero': No space left on device
3+0 records in
2+0 records out
1024 bytes (1.0 kB, 1.0 KiB) copied, 0.000719156 s, 1.4 MB/s

Это нули, зашифрованные LUKS. Дублированный зашифрованный текст:

# sync
# dd count=1 seek=1 if=/dev/loop9 of=/dev/loop9
# hexdump -C /dev/loop9
00000000  1c 18 b1 e6 57 9c a1 60  8c 98 f0 d3 59 8b 97 0c  |....W..`....Y...|
00000010  bc fc 8a 62 68 52 51 f1  51 49 bf 21 2e f5 bc 84  |...bhRQ.QI.!....|
[...]
000001e0  4a e0 ef eb 8f 09 18 a8  73 95 0b 2c 59 01 69 1b  |J.......s..,Y.i.|
000001f0  92 71 e6 0d dd 3b 71 b5  22 f4 34 1c e1 4a 95 71  |.q...;q.".4..J.q|
00000200  1c 18 b1 e6 57 9c a1 60  8c 98 f0 d3 59 8b 97 0c  |....W..`....Y...|
00000210  bc fc 8a 62 68 52 51 f1  51 49 bf 21 2e f5 bc 84  |...bhRQ.QI.!....|
[...]
000003e0  4a e0 ef eb 8f 09 18 a8  73 95 0b 2c 59 01 69 1b  |J.......s..,Y.i.|
000003f0  92 71 e6 0d dd 3b 71 b5  22 f4 34 1c e1 4a 95 71  |.q...;q.".4..J.q|
00000400

Зашифрованный текст полностью продублирован. Результат расшифровки:

# hexdump -C /dev/mapper/luks_zero 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  b7 6c 5c 84 3d 7d dc 58  fc d5 ee 7f 20 c0 d5 09  |.l\.=}.X.......|
00000210  a8 78 f8 d8 38 4b 6a 24  bb b1 d2 65 b8 5c 2b ac  |.x..8Kj$...e.\+.|
[...]
000003e0  08 31 74 f4 59 92 3b 7f  0f fa b9 36 2e de 53 e2  |.1t.Y.;....6..S.|
000003f0  24 83 01 53 6e 56 dc a5  3a 3f 1b 4e d5 0a fd a9  |$..SnV..:?.N....|
00000400

512 нулевых байтов, за которыми следует полный мусор. Это не доказывает, что криптография хороша, но она не настолько паршивая, как та, которую вы получили от aespipe.


Теперь, поскольку это происходит из-за неправильного IV, вы можете просто убедиться, что зашифровали с правильным IV.aespipeимеет флаг -O sectornumberдля этого:

   -O sectornumber
          Set IV offset in 512 byte units. Default is zero. Data is encrypted  in  512  byte  CBC
          chains  and  each  512  byte  chain  starts with IV whose computation depends on offset
          within the data. This option can be used to start encryption or decryption in middle of
          some existing encrypted disk image.

Новый способ шифрования и объединения вещей:

# dd count=1 if=/dev/zero | aespipe -O 0 > aes_zero
Password: Error: Password must be at least 20 characters.
# dd count=1 if=/dev/zero | aespipe -O 1 >> aes_zero
Password: Error: Password must be at least 20 characters.

Убедитесь, что он совпадает с тем, который мы зашифровали за один раз:

# md5sum aes_zero aes_zero2 
3b0479e04a46a3d268dc4252e066d2b5  aes_zero
3b0479e04a46a3d268dc4252e066d2b5  aes_zero2

Убедитесь, что результат расшифровки теперь правильный:

# cat aes_zero | aespipe -d | hexdump -C
Password: Error: Password must be at least 20 characters.
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400

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

Динамический вывод правильного -O sectornumberзначения из размера файла предлагается читателю в качестве упражнения.

1
18.10.2021, 05:48
1 ответ

Создайте файл с именем, например./usr/share/xsessions/safemode.desktop

[Desktop Entry]
Encoding=UTF-8
Name=Safemode (Xterm)
Comment=
Exec=xterm
Terminal=False
TryExec=xterm

[Window Manager]
SessionManaged=true

Перезапустите SDDM или перезагрузите компьютер. Войдите в «Безопасный режим (Xterm )». Теперь запустите:

startplasma-x11илиenv GNOME_SHELL_SESSION_MODE=pop /usr/bin/gnome-session --systemd --session=pop(все записи находятся в/usr/share/xsessions/-проверьтеExec).

Проверьте наличие сообщений об ошибках в окне терминала. Чтобы завершить сеанс xterm, просто введите exitили reboot. Если что-то мешает вам использовать этот xterm, введите Ctrl + C

0
18.10.2021, 08:55

Теги

Похожие вопросы