XKCD

Нравятся мне комиксы xkcd, рисуют их наши люди.

Кстати, действительно работает. Один узел = π/e миль в час, с довольно высокой точностью.

Via https://xkcd.com/3023/

Забавно, кстати, смотреть на то, что некоторые комиксы уже устарели. Это комикс примерно года эдак 2013-2014, когда нейросети были ещё слабо известны. Я, впрочем, с ними уже был знаком, и использовал в 2012 году для дипломного проекта нейросеть Caffe института Беркли, которую сам с нуля натренировал. Но для начала 2000х проблема была ещё нерешаема.

Квантовое

Однако, ровно месяц назад Национальный Институт Стандартов и Технологий США (NIST) наконец-то решил, какими именно алгоритмами шифрования мы будем пользоваться для защиты информации в пост-квантовую эпоху.

Скажем, обычный RSA для таких целей уже не подходит, так как вся сила RSA в том, что разложение 4096-битного числа на два простых множителя — это экстремально ресурсоёмкая задача, на которую даже на современных суперкомпьютерах понадобится срок, сравнимый с возрастом наблюдаемой Вселенной.

Но для квантовых компьютеров существует алгоритм Шора, позволяющий провести разложение на множители за существенно меньший (логаритмический) срок.

А теперь Микрософт объявил, что первый из алгоритмов, ML-KEM (чорт, мне нравится это название, КЕМ!) уже встроены в стандартную библиотеку шифрования их ОС. ML-KEM — алгоритмом Шора уже не ломается.

Приятно удивлён такой прозорливостью и оперативностью — за месяц нарисовать и оттестировать такую ответственную вещь, как алгоритм шифрования — это похвально. Но, конечно, наверняка им из НИСТа кто-нибудь свистнул заранее.

Математическое и компьютерное

Вот некоторые думают, что если вычисления перенести на ГПУ вместо ЦПУ, то:

1. Всё сразу заработает в сто раз быстрее.
2. Будет сразу работать лучше.

АвотшЫш. Не всегда, и не везде.

Вот сделал я нейросеть, модель одинаковая, довольно несложная, пятислойная, сто нейронов в каждом слое, итого 50 тысяч параметров — по нынешним меркам вообще три копейки.

Запускаю на ЦПУ — сеть тренируется за три минуты, и выдаёт довольно нормальный результат, с точностью в пределах 0.7%

Запускаю на ГПУ — сеть тренируется уже за пять минут, а не за три, а результат у ней — заметно хреновей, с погрешностью уже 1.23%

Я полагаю, что последнее это потому, что TensorFlow, будучи запущенным на ГПУ, по умолчанию до сих пор использует 16 бит для представления чисел с плавающей запятой, вместо 32 бит или даже 64. Надо будет поглядеть, можно ли его заставить использовать больше бит. Хотя, конечно, математика на компьютерах — она дело такое, что вообще-то никто гарантии, что результат вычислений будет одинаковым, если программа запускается на процессорах разной архитектуры, никогда не давал. Особенно, если числа такие, что представить их точно в формате IEEE-754 невозможно (например, десятичная дробь 0.2).

А вот почему оно ничуть не быстрее работает на ГПУ, чем на ЦПУ — для меня уже загадка. RTX3080 вроде как пошЫрше должен быть во флопсах, чем i9-11900k @ 3.5GHz. Может быть, такая маленькая модель его просто нагрузить толком не в состоянии.

И да, “чтобы два раза не вставать”.

Как наиболее правильно считать и представлять среднюю ошибку в вычислениях?

Вот, например, если в одном предсказании из двух программа ошиблась на +100%, а во втором — на -100%, врядли заявление о том, что средняя ошибка составляет 0% (100-100)/2, будет представляться нам истинным.
Но с другой стороны, если тупо считать ошибки по модулю, а программа при этом стабильно ошибается то на +1%, то на -1%, статистически-то ведь она, можно сказать, что не ошибается вовсе.
Как обычно действуют, вдруг кто знает?

Pi Day

Т.к. дату в формате ММДДГГГГ обычно пишут только в США, специальный день календаря 3.14 получается сугубо американским.

Ну, тогда вот вам шутку на математическом английском.

Объясняю, если кто недопонял:

Квадратный корень из минус единицы — это комплексное число, которое записывают буквой i.
Двойка в третьей степени — это восемь (eight), произносится точно так же как слово ate.
Сигма — это сумма (sum), произносится как слово some.
Ну и само число Пи, которое в английском Pi, и произносится не как Pee, а как слово Pie (пирог).

Так что получаем фразу, которая звучит как i ate some pie (я съел кусок пирога). Математический кавай.

Математическая шутка

Обожаю такие шутки.

Математик заходит в забегаловку, берёт столик на двоих. К нему подходит неопрятная официантка.

–Что будете заказывать?
–Я закажу бифштекс, но я также хочу разыграть своего коллегу, который тут будет с минуты на минуту. Вот сто долларов; когда он придёт, я задам вам вопрос, а вы ответите “икс в кубе поделить на три”, хорошо?
–Конечно.

Официантка берёт деньги и уходит.

За столик присаживается коллега математика.

–Привет!
–Привет! Слушай, тут такое классное место, и даже обслуживающий персонал умный. Вот смотри!

Математик останавливает проходяющую мимо официантку.

–Скажите мне, каков будет неопределённый интеграл функции икс в квадрате?
–Икс в кубе поделить на три плюс константа.

PS: шутка прекрасно переводится на все языки, матан — язык универсальный.

Взлом резервных копий смартфонов iPhone

Для начала немного теории.

Как хранятся пароли в операционных системах, вебсайтах, и т.д. Не открытым текстом, разумеется. Они хранятся в виде хешей. Хеш — это строка определённой длины, получаемая при обработке ввода (пароля в данном случае) хеш-функцией. До недавнего времени (да и сейчас кое-где) использовался алгоритм MD5. Так, хеш MD5 слова “password” представляет собой строку 5f4dcc3b5aa765d61d8327deb882cf99.

Поэтому когда ты логинишься на вебсайт, пароль обрабатывается алгоритмом MD5, и сравниваются хеши. Если на выходе 5f4dcc3b5aa765d61d8327deb882cf99, то всё нормально. Винда делает немного по-другому: хеш генерируется прямо на клиенте, и пересылается не пароль, а сразу хеш. Это цуцуть безопаснее. Ещё хеш солят, но про это в другой раз.

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

Я уже давно люблю программу котохеш (hashcat) для взлома паролей. У неё исключительно высокая производительность, так как она использует видеокарту для расчётов вместо центрального процессора. Нет, она и процессор может использовать, просто на видеокарте быстрее, там этих процессоров тысячи, а хеширование исключительно хорошо распараллеливается.

Сломаем MD5 хеш 5f4dcc3b5aa765d61d8327deb882cf99:

hashcat.exe -m 0 -a 3 hash.txt ?l?l?l?l?l?l?l?l

И меньше, чем за секунду всё сломано.

На моей уже старенькой 1070GTX поиск хешей MD5 происходит со скоростью около 8 миллиардов комбинаций в секунду.

Даже если сменить пароль на более сложный, типа P@$$w0rd, то 8-значный пароль взламывается в обозримые сроки, даже на не очень новом железе — за несколько дней.

НО. Подобные сроки — они для паролей, хешированных MD5. От которого везде отказываются как могут. Он считается криптографически нестойким: во-первых, он подвержен коллизиям (т.е. два совершенно разных пароля могут дать одинаковый хеш), а во-вторых он имеет недостаточную вычислительную сложность. Т.е. тот факт, что даже на моём старом железе я могу перебирать восемь миллиардов паролей в секунду — он из-за этого происходит.

А недавно я попробовал сломать бекап смартфона Apple. Для тёщи, которая раскокала телефон вдребезги, успев, правда, незадолго до сделать ему бекап. Но вот беда — она забыла пароль от бекапа! Она только знала, что пароль восьмизначный.

Хеш пароля для айфонного бекапа берётся в файле Manifest.plist. Этот файл скармливается вот этому сайту, например, и тебе дают хеш.

Так вот хеш там — какой-то проприетарный. И имеет настолько высокую вычислительную сложность, что на моей видеокарте котохеш перебирает комбинации со скоростью… 83 варианта в секунду. Надо отдать должное чувству юмора разработчиков котохеша: во время работы оно показывает, сколько времени осталось до перебора всех вариантов. Так вот в данном случае оно говорит, что работа программы закончится после следующего Большого Взрыва 😀

Вот так вот Плотнег лососнул тунца.

Огромный респектищще Эпплу — я в очередной раз убедился, что уж с чем-чем, а с надёжностью шифрования у них всё всегда было в полном порядке. Огромным плюсом является то, что Эппл контролирует весь цикл производства телефона — от железа до софта. Поэтому что, как и каким способом — всегда было хорошо известно и задокументированно. Ну и традиционно, пнём Ведроид 🙂 На Ведроидах, кто шифрует что и как — а хер его знает! Кто из производителей как захотел, тот так и шифрует. И скажи ещё спасибо, если задокументировано. А могут и тово, на хрен послать.

Не всё так плохо

Моя гневная телега по поводу национальных особенностей преподавания математики в начальной школе получила довольно простой ответ: дети всё же умеют складывать двузначные числа в столбик.

А зачем тогда таблица до ста? Это для отстающих детей, которые до сих пор не врубаются во-первых, а во-вторых это мост в обучение добавлению единички в более старший разряд, если сумма чисел предыдущего разряда превышает десять. Так как у нас заканчиваются клеточки, и надо начать снова (спустившись вниз) — дети должны осознать, что мы добавляем ещё десяток.

Топоры-вилы-факелы отставить.

Как в Америке преподают математику

Извиняюсь за матюги, но выбесило.

Очередная чушь-бредятина от местной системы преподавания основ математики и горячий привет от Common, блядь, Core.

Как нормальные люди складывают два числа, которые они не могут просто сложить в уме? Правильно, в столбик (long addition). Как нынче учат складывать американцев? Для двузначных чисел рисуют, блядь, таблицу с числами от одного до ста (hundreds chart). Вот такую:

Допустим, надо тебе сложить 36 и 23. Для этого надо найти в таблице число 36, и спуститься вниз на две клеточки (добавляем десятки), и потом вправо на три (добавляем единицы). Получаем, разумеется, 59.

Что не так с этим методом? Да всё не так. Во-первых, он хуёво масштабируется. Если тебе надо тысячи сложить, что, таблицу до миллиона рисовать? А если складывать миллиарды?

Во-вторых, он ничему не учит. Он не учит тому, что десятки надо складывать с десятками, а единицы с единицами. Он учит МЕТОДУ, а не пониманию чисел.

В-третьих, он не учит тому, что надо делать, если требуется сложить, например, 19 и 39 — вправо ведь нету 9 клеточек.

Накатал училке гневную телегу (без матов), поглядим, что ответит.

Прямо таки “пора валить”, блядь.

Про трёхмерный звук

Предыдущий пост собрал большое количество комментариев. И тема действительно интересная. Как человек, имея только два уха, расположенных на горизонтальной оси, в принципе может отличить, летает ли муха у пола или у потолка. И находится ли она сзади нас или спереди нас. Ведь может? Ну, не с такой точностью, с какой мы можем определить угол направления на источник звука, находящийся спереди нас (в идеальных условиях человек способен на точность определения этого угла с погрешностью в два градуса!!!), но может. Да, плоховато, но способен. Если муха будет тупо летать по окружности, вокруг нашей головы, никаких проблем с опознаванием того, сзади муха или спереди, у нас не возникнет.

Я никоим образом не являюсь специалистом в данной области. Но из того, что я наскрёб в интернетах, это связано с акустическими особенностями нашей с вами головы. Наши уши являются слегка направленными из-за их формы. Это не микрофоны с круговой направленностью. Мы воспринимаем звук по-разному в зависимости от угла; звук, идущий сзади, частично отражается от задней части ушей, из-за чего меняется амплитудно-частотная характеристика воспринимаемого звука. Наш мозг вполне способен на обработку данной информации и расчёту позиции его источника. Безусловно, это сложнее для какого-то одиночного сигнала, и проще для сигнала продолжительного, так как у нас есть, с чем сравнить.

Я даже полагаю, что для некоторых звуков угол наш мозг будет вычислить не в состоянии. Например, звук синуса частотой 1KHz меняться будет очень слабенько. Ну да, он будет по-разному затухать, но врядли это даст мозгу достаточно информации. А вот местоположение шума, где частотная полоса очень широкая (есть, чему избирательно затухать!), будет определяться легче.

Есть вполне строгие математические формулы, по которым можно рассчитать, как должен меняться звук при смене его расположения. К сожалению, я не нашёл никакой информации на русском языке, но на английском это называется Head-related transfer function (HRTF). Это уже за гранью моего понимания, я дальше матана и статистики с теорвером ничего не изучал. Вот тут я нашёл аж целый небольшой вводный учебничек по данному вопросу, за авторством двух профессоров Мичиганского университета: https://isr.umd.edu/Labs/ISL/BAIL/hrtf_review.pdf. Ну, если кто-нибудь решит всерьёз закопаться.

Компьютерные чипы компании Aureal, которым я пел дифирамбы, занимаются именно этим — обсчётом того, как должен меняться звук, в зависимости от его позиции. Не надо верить мне на слово. Вот добрый человек выложил эти демки на ютуб. Поглядите сами.

Теперь по поводу музыки в этом формате. Уже сведённое стерео, безусловно, невозможно нормально переделать на этот формат. Это надо сводить заново. Я думаю, что берётся изначальная многоканальная запись, к отдельным трекам применяется этот самый HRTF, и вперёд — создаётся этот самый эффект присутствия. В Эппл музыке далеко не все записи являются такими, и там специально выводится индикация того, что ты слушаешь Dolby Atmos, а не обычное стерео.

Пора валить

По поводу американского среднего образования, увы, начинают сбываться мои самые большие опасения.

Ребёнок притащил домой контрольную работу (1й класс). В ней было вот такое задание:

Расставьте числа по порядку:

10, 2, 7, 5, 8

Дитя ответило:

10, 8, 7, 5, 2

Училка поставила “неправильно”.

Послал контрольную назад в школу с лаконичной запиской, грубо выражаясь, “вотзефак”.

Если ты имела в виду “расставьте числа по порядку возрастания”, так и надо было писать, а не сношать мозги, открывая простор для интерпретации.

Посмотрим, что ответит. “За рекой тревожно завыли псы” ©

А мне, тем временем, остро захотелось в Финляндию или ещё куда, где ещё не протянулись вонючие щупальца реформаторов преподавания математики.