The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Использование TRESOR для хранения ключей шифрования AES не в ОЗУ, а в регистрах CPU
При использовании зашифрованного раздела с конфиденциальной информацией,
злоумышленник, имеющий физический доступ к компьютеру, может воспользоваться
методом холодной перезагрузки
(http://www.opennet.dev/opennews/art.shtml?num=17035) для получения ключей
шифрования. Метод основан на способности оперативной памяти (DRAM) какое-то
время сохранять информацию после отключения питания и отсутствия импульсов
регенерации ее содержимого (при температуре -50 градусов данные сохраняются
более 10 минут). После холодной перезагрузки или переключении чипа памяти на
другое устройство память не обнуляется и данные старой рабочей сессии можно
проанализировать. Особенно актуальная проблема для ноутбуков, которые часто не
выключаются и лишь переводятся в ждущий режим, при котором ОЗУ не
обесточивается. В простейшем случае, восстановить ключ из памяти можно
используя утилиту msramdmp (http://www.mcgrewsecurity.com/tools/msramdmp/),
перезагрузившись в LiveCD (например, можно использовать msramdmp_cd.iso).

В рамках проекта TRESOR (http://www1.informatik.uni-erlangen.de/tresor)
подготовлены патчи для ядра Linux с реализацией модуля шифрования AES, который
сохраняет ключи в отладочных регистрах процессора и обрабатывает все операции
шифрования непосредственно в CPU, без копирования ключей в ОЗУ. TRESOR  может
использоваться на любых процессорах с поддержкой SSE2. При использовании
64-разрядных CPU с поддержкой набора инструкций AES-NI,  например, Intel Core
i5 или Core-i7, поддерживается работа с ключами AES 128, 192 и 256 без потери
производительности. При запуске на 32-разрядных CPU с поддержкой инструкций
SSE2, скорость выполнения шифрования примерно в 6 раз ниже, чем базовая
реализация AES для ядра Linux. При этом можно использовать только ключи длиной
128 бит.

Собираем ядро с патчем TRESOR.

Загружаем ядро 2.6.36 с http://kernel.org и распаковываем его в директорию /usr/src/linux-2.6.36.

Применяем патч (http://www1.informatik.uni-erlangen.de/tresor):

   cd /usr/src/
   patch --directory /usr/src/linux-2.6.36 -p1 < tresor-patch-2.6.36

Запускаем menuconfig и настраиваем параметры ядра, не забыв включить TRESOR
(Cryptographic API -> AES cipher algorithms (TRESOR)).

Собираем ядро. Ниже пример сборки и установки пакета для Debian GNU/Linux:

   cd /usr/src/linux-2.6.36
   make-kpkg kernel_image --initrd --revision tresor1
   cd /usr/src
   dpkg -i linux-image-2.6.36-tresor1.deb
   update-initramfs -c -k 2.6.36


Запускаем систему

Перезагружаемся, выбрав ядро с патчами TRESOR.

В ответ на приглашение TRESOR "Enter password" вводим пароль и подтверждаем валидность хэша:

   Enter password > ******** 
   Confirm key hash > 51 b7 fd ... 58 ac Correct (yes/no) > yes

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

После того как система загрузится можно попытаться перевести её в ждущий режим
и проверить работу TRESOR:

   echo mem > /sys/power/state

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


Настройка шифрования

Устанавливаем утилиты для работы с dm-crypt:

   apt-get install cryptsetup

Если ядро собрано с поддержкой LKM, убедимся, что загружен модуль ядра dm_mod:

   modprobe dm_mod

В качестве демонстрации настроим два варианта шифрования: отдельного раздела на
USB-накопителе и виртуального шифрованного раздела внутри файла.


Настройка зашифрованного дискового раздела

Зашифруем раздел /dev/sdb1: 

   cryptsetup create tresor /dev/sdb1 --cipher tresor --key-size 128

   > Enter passphrase: указываем произвольный пароль

Размер ключа для 64-разрядных процессоров с поддержкой AES-NI может быть 128,
192 и 256. Для остальных CPU - только 128.

Форматируем созданный шифрованный раздел:

   mkfs.ext2 /dev/mapper/tresor

Монтируем раздел:

   mount /dev/mapper/tresor /media/tresor

все операции записи и чтения в /media/tresor производятся с использованием шифрования.

Отмонтируем раздел и выгружаем шифрованное устройство:

   umount /media/tresor
   cryptsetup remove tresor

Настройка зашифрованного контейнера (шифрованный раздел внутри файла)

Создаем пустой файл-контейнер container.img, размером 1 Гб:

   dd if=/dev/zero bs=1M count=1024 of=container.img

Прикрепляем контейнер к псевдоустройству через loop-интерфейс:

   losetup /dev/loop0 container.img

Повторяем действия, описанные выше для шифрованных дисковых разделов, но
используя в качестве имени устройства /dev/loop0

При отмонтировании, для отсоединения контейнера от loop-устройства дополнительно выполняем:

   losetup -d /dev/loop0 
 
04.09.2011 , Источник: http://www1.informatik.uni-erlangen...
Ключи: tresor, aes, crypt, cpu, cryptsetup, dm-crypt / Лицензия: CC-BY
Раздел:    Корень / Безопасность / Шифрование, PGP

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, ss (??), 15:54, 04/09/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    vostorg!
     
  • 1.2, Урсадон (?), 20:05, 04/09/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ... специально для параноиков 70го уровня.
     
     
  • 2.3, funt (?), 20:43, 04/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    не ниже 85лвл)
     
     
  • 3.5, x0r (??), 13:02, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    не доверяю я этому AES...
    blowfish лично проверял.
    еще "одноразовый блокнот" хорошая штука,
    для этого надо завести аппаратный ГСЧ и хранить 8Гиговые ключи, например на флешках или DVD...
     
     
  • 4.7, Аноним (-), 15:22, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > не доверяю я этому AES...

    Особенно аппаратной реализации от интела.

     
     
  • 5.8, AdVv (ok), 17:20, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вы бы уже создали закрытый форум, и там бы сидели и никому не доверяли все вместе.
    Могу даже подкинуть идейку как назвать - "Клуб Неуловимого Джо".
     
  • 5.9, Андрей (??), 20:07, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё месяц-другой подождать и с амд'шным бульдозером можно будет попробовать. Или вы исключительно собственноручно сVHDLенным ПЛИС доверяете?
     
  • 2.12, Px (?), 01:07, 07/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Если у вас паранойя, то это совсем не значит, что за вами не следят...
     

  • 1.4, AHAHAC (ok), 03:14, 05/09/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Патч похож на троян :)

    Что за цифры, хрен знает...  (отписался автору, пущай рассказывает.)



    /***************************************************************************
    *   DATA SEGMENT
    ***************************************************************************/

    .data
    gfbd9e:
        .long 0x00000000, 0x0b0d090e, 0x161a121c, 0x1d171b12
    .long 0x2c342438, 0x27392d36, 0x3a2e3624, 0x31233f2a
    .long 0x58684870, 0x5365417e, 0x4e725a6c, 0x457f5362
    .long 0x745c6c48, 0x7f516546, 0x62467e54, 0x694b775a
    .long 0xb0d090e0, 0xbbdd99ee, 0xa6ca82fc, 0xadc78bf2
    .long 0x9ce4b4d8, 0x97e9bdd6, 0x8afea6c4, 0x81f3afca
    .long 0xe8b8d890, 0xe3b5d19e, 0xfea2ca8c, 0xf5afc382
    .long 0xc48cfca8, 0xcf81f5a6, 0xd296eeb4, 0xd99be7ba
    ...
    ...
    ...

    /* common code for inv_mix_column */
    .macro inv_mix_helper r l reg init
    psrldq $\r,rhelp          
    movd rhelp,eax    
    andl $0x000000ff,eax
    movl gfbd9e(,eax,4),eax
    rol $\l,eax          
    .if \init
    movl eax,\reg
    .else
    xorl eax,\reg
    .endif
    .endm


     
     
  • 2.6, AHAHAC (ok), 13:43, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >  Что за цифры, хрен знает...  (отписался автору, пущай рассказывает.)
    > gfbd9e:
    > ...

    Ответил

    - What mean this digits?


    - This table is only part of the tresor-2.6.36_i686 patch, not of the 2.6.36_aesni
    patch, because it is part of the actual AES implementation. With AESNI support,
    the AES implementation is directly integrated into hardware; without AES we have
    to do it by hand.

    This weird "gfbd9e" thing is a more efficient way to implement AES -- based on
    lookups rather than on algorithmic computations. For a more detailed explanation
    of the principle of using lookup tables in AES, please refer to Brian Gladman:

    http://www.gladman.me.uk/

    The original AES code inside the Linux kernel is based on his ideas as well.

     
     
  • 3.10, Щекн Итрч (ok), 21:36, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    В общеи, ЧТО ЭТО, он не раскрыл.
     
     
  • 4.11, AHAHAC (ok), 04:49, 06/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это вот это - http://en.wikipedia.org/wiki/Rijndael_S-box#Inverse_S-box

    Только тут не чистый S-box, а уже дальнейшие преобразования, промежуточные константы.
    В процах с поддержкой AESNI используют команду aeskeygenassist rcon,r1,rhelp
    Без - обратный S-Box и 4 команды сложения по модулю.

     
     
  • 5.16, Щекн Итрч (ok), 09:47, 12/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Это вот это - http://en.wikipedia.org/wiki/Rijndael_S-box#Inverse_S-box
    > Только тут не чистый S-box, а уже дальнейшие преобразования, промежуточные константы.
    > В процах с поддержкой AESNI используют команду aeskeygenassist rcon,r1,rhelp
    > Без - обратный S-Box и 4 команды сложения по модулю.

    Пусть аффтар поднапряжётся и предоставит сырец в более удобочитаемом виде.


     
  • 4.13, fuufuu (?), 09:57, 08/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > В общеи, ЧТО ЭТО, он не раскрыл.

    это опенсорц. пиши свое или ешь что дают. и да, отладочные р-ры используются довольно часто


     
     
  • 5.14, AHAHAC (ok), 02:44, 09/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Теперь давай объясняй смысл сего высера?!
    А то, чёй-то моск крушиться в попытке связать ассемблерный код и отладочные регистры.


     
  • 5.15, Щекн Итрч (ok), 09:46, 12/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> В общеи, ЧТО ЭТО, он не раскрыл.
    > это опенсорц. пиши свое или ешь что дают.

    Сначала сырцы анализатором прогоню?


     

  • 1.17, nagual (ok), 23:11, 16/09/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Когда процес юзает эти долбанные возможности процессора (AES) ядро видит что процес делает AES а когда процес колдует свой самописный алгоритм шифрования то поди догадайся что то шифрование или просто кто то забыл мысор в исходниках подчистить :-)) так что эти встроенные аглоритмы это минимум идентификация ... даже если оно все действительно без бэкдоров ;-)
     
     
  • 2.19, учицца нада (?), 23:47, 16/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Когда процес юзает эти долбанные возможности процессора (AES) ядро видит что процес
    > делает AES а когда процес колдует свой самописный алгоритм шифрования то
    > поди догадайся что то шифрование или просто кто то забыл мысор
    > в исходниках подчистить :-)) так что эти встроенные аглоритмы это минимум
    > идентификация ... даже если оно все действительно без бэкдоров ;-)

    у 90% в процах нет аппаратного AES пока - поэтому нужно как-то выкручиваться. И лет 10-15 этот код ещё будет актуален. Посмотри вокруг себя - и 100% где-то найдешь используемый ПК 10-летней давности. А с учетом избыточности сегодняшних мощностей - наверняка лет через 10-15 ещё будут живы коре2...

     
     
  • 3.22, asdf (?), 12:18, 21/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Может и будут живые коре 2 у единиц. Но большинство будет использовать компьютер которые в 10-20 раз занимает меньше места.
     

  • 1.23, funny_falcon (?), 12:32, 22/09/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Проблема в том, что при переключении контекста (т.е. на другое приложение) все регистры сохраняются в памяти, так что это полная туфта (как мне кажется).
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру