Провел пару про кэши во вторник!
https://youtu.be/Qff61KxVCk8
Не очень легко она мне далась. Во-первых, материала много и хочется рассказать самое-самое интересное, но при этом сделать связный рассказ, а не просто накидать набор фанфэктов. Во-вторых, я обновил hyprland и у меня как всегда задеприкейтилась половина конфига, а пока я его чинил, то доломал окончательно. Поэтому ночь не спал - одной рукой чинил комп, другой смотрел доклады про кэши, уязвимости и все такое.
Но несмотря на все это пара получилась интересной: с наглядными примерами и я даже не так жестко тупил (только воду пролил)! Да и студенты вопросы задавали и подсказывали)
Классный фанфэкт с пары про side channel через кэш процессора:
Можно сделать так, чтобы одна часть программы читала из памяти некоторый символ, а другая часть программы угадывала, что было прочитано.
Как это работает:
Возьмем массив чаров размером 256x4096 и будем считать, что в массиве 256 элементов, разделенных дырками по 4096 байт.
Перед чтением удаляем массив из кэша (`_mm_clflush`) и дальше читаем какой-то элемент из 256.
Дальше, чтобы угадать, нужно заново пройтись по всем элементам массива и замерить, сколько времени потребуется на чтение каждого. Самый быстро прочитанный элемент и должен быть тем, который уже читали до этого, посколько должен попасть в кэш.
Большие дырки в 4096 байт нужны для того, чтобы при чтении одного элемента не загрузились кэшлинии, содержащие другие элементы
(на картинке время чтения каждого элемента, попробуйте угадать, какой был загадан)
Поиграть с этим можно вот тут:
https://godbolt.org/z/nYdzYz65P
Данный side channel - часть уязвимости spectre. Исходное описание и код можно прочитать вот тут:
https://spectreattack.com/spectre.pdf
Также другие материалы по теме:
https://www.youtube.com/watch?v=_f7O3IfIR2k
https://www.youtube.com/watch?v=ehNkhmEg0bw
https://habr.com/ru/companies/skbkontur/articles/740564/
https://www.youtube.com/watch?v=bNAPVxvJPds
Обсуждение 6
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram