Хранит только хеши. Но можно же отрезать у нового пароля последний символ и добавить другой. И так, перебором проверить, не совпадает ли это с каким-то из старых паролей.
Жесть какая. Вспоминается шутка о том, что хороший сишник может писать на С на любом языке.
Весь код завернут в монаду IO. Чем это отличается от программирования на любом императивном языке?
Очевидно, что Хаскель совершенно не подходит для таких задач. А вот кодек на нём запрограммировать было бы наверное очень удобно.
На аппаратном уровне компьютерная память состоит из множества триггеров. Каждый триггер состоит из нескольких транзисторов, он способен хранить один бит данных. Каждый из триггеров имеет уникальный адрес, поэтому их содержимое можно считывать и перезаписывать. Таким образом, концептуально, мы можем воспринимать компьютерную память как огромный массив битов, которые можно считывать и записывать.
Однако, программисты — люди, а не компьютеры, оперировать отдельными битами им не особенно удобно. Поэтому биты принято организовывать в более крупные структуры, которые можно представлять в виде чисел. 8 бит формируют 1 байт. Помимо байтов здесь в ходу такое понятие, как слова (иногда — длиной 16 битов, иногда — 32).
Извините, но это абсолютно неверно.
Процессор не может адресовать конкретный бит. У процессора просто не такой команды как «запиши/прочитай бит номер N в памяти». Минимальной адресуемой единицей является байт. У каждого байта есть свой адрес и процессор может читать и писать по байту или больше.
В байте не обязательно восемь бит. Старые компьютеры работали с пяти- или шести- битными байтами. Т.е. у каждой пятерки (шестерки) бит был свой адрес. Сейчас существуют архитектуры, где байт имеет длину 32 бита (DSP всякие). Опять же, это значит что процессор не может прочитать или записать меньше 32 бит за раз. И у каждых 32 бит есть свой адрес.
По определению, байт — это минимальный независимо адресуемый набор данных.
А ровно восемь бит имеет октет. Вы наверное встречали это слово, когда работали с сетями. Дело в том, что через сеть могут быть соединены машины совершенно разных архитектур, с разной длиной байта. Поэтому, что бы не было путаницы, в сетевых протоколах используют слово «октет».
А со «словом» существует ещё большая путаница. Размер машинного слова — это размер регистра.
Раньше, в эпоху 16 битных компьютеров слово состояло из двух байт. Сейчас оно чаще всего состоит из восьми.
Там много интересного. Почитайте PDF. Кроме нескольких RCE (без аутентификации!), атакующий может подключится к вашему устройству, поднять сеть (через профиль PAN), и предложить через DHCP свои статические маршруты, свои DNS сервера и настройки прокси (под виндой). И все это без вашего участия. Атакующему достаточно знать только MAC-адрес вашего устройства.
Бррр. Такое ощущение что вы придумали какую-то свою терминологию, которая постоянно сбивает с толку. Интуитивно кажется что низкое ветвистое дерево — это дерево с малой глубиной вложенности, зато с большим количеством веток. То же самое меню сайта. Много веток (поддеревьев) — поэтому ветвистое. Небольшая глубина вложенности — поэтому дерево низкое.
Высокое дерево — это наоборот дерево с большой вложенностью (википедия тут со мной согласна:
Height of node — The height of a node is the number of edges on the longest path between that node and a leaf.
Height of tree — The height of a tree is the height of its root node.)
А вы поменяли эти два термина местами, из-за чего читать статью очень тяжело.
За фокусниками тоже следят внимательно, но ход трюка улавливают не все. Без базы ни домохозяйка, ни кодер не поймет эту тему сам по себе. В лучшем случае он будет думать, что понял.
Ну очевидно что это — не справочник. Тем не менее эта статься дает довольно глубокое понимание того как работают эллиптические кривые.
Вот глупые люди в разведке сидели-то (а может, и сидят), наверное, со своей секретностью.
Аргумент к авторитету. Не катит.
Нет, это правда не очевидно? Повышенный порог входа потенциального противника для криптоанализа — это явная фича.
Абсолютно не очевидно. Вся информация есть в свободном доступе. Исходить из предположения что у вероятного противника сидят более глупые математики — неправильно. Надежность алгоритма должна обеспечиваться математическими средствами, а не тем фактом что в нем никто не может разобраться. Эллиптические кривые используют не потому что они такие сложные.
Ну и DES в качестве аналогии — сильно. Это ведь коммерческий шифр, созданный с кучей ограничений (иначе стандартом не приняли бы),
Тем не менее АНБ принимали участие в разработке. И сделали его надежнее, вместо того что бы ослабить. Потому что они тоже не дураки и не хотят что бы вероятный противник сломал их банковскую систему, например.
Они понимают, что если они изобрели новый способ криптоанализа, значит его может изобрести и вероятный противник. Если они сделали закладку, значит эту закладку может найти вероятный противник. Зачем подставлять свою страну?
Как вы думаете, что опаснее в современном мире — то что вероятный противник будет читать ваши военные шифры, или то что он сможет сломать вам банкинг, Интерент и телефонию?
Готов поспорить на что-нибудь, что случайный человек без высшего профильного после одной лекции эту статью не осилит. Ну и просто перечисление понятий — это сильно, вот именно их-то для понимания криптографии людям и не хватает.
Там нет ничего ужасного. Насколько я помню, теорию множеств преподают ещё в школе.
Если вы программист, то в модульной арифметике разбираетесь, так или иначе.
Понятие группы и кольца вводится прямо в этой статье. Больше ничего сложного вроде нет. Главное — внимательно следить за выкладками.
Чем меньше человек способны вникнуть в теорию и заниматься анализом, тем лучше.
Тем хуже. Чем больше людей могут понять и найти проблему — тем больше шансов что об этой проблеме узнаю все, а не только те-кому-надо. См. ту же историю с DES и дифференциальным криптоанализом (я её уже упоминал тут).
Возможно ли, что NIST обнаружил «значительно большой» класс слабых эллиптических кривых, попробовал различные возможные варианты порождающих значений и нашёл уязвимую кривую
С другой стороны можно вспомнить известную историю DES. NSА попросили разработчиков алгоритма изменить содержимое S-boxes (таблиц перестановок), но не сказали почему они должны быть именно такими.
Через 20 лет академическое общество (пере)открыло дифференциальный криптоанализ. Оказалось, что S-boxes, предложенные NSA делают DES защищенным от этой атаки. Если бы S-boxes выбирались случайно, то DES был бы намного уязвимее:
Bruce Schneier observed that «It took the academic community two decades to figure out that the NSA 'tweaks' actually improved the security of DES».
Интересно чем они собирали. У меня hello world собранный GCC5.4.0 занимает 8 килобайт. Стрипнутый — 6 килобайт. В основном — секции с метаданными и информацией для динамической линковки.
В секциях кода — в основном инициализация/деинициализация libc.
Короче, ничего такого страшного. Можно выкинуть всё и дернуть write() руками. Но зачем?
Ну когда вы ставите пакет через rpm/dpkg/apt/pacman/etc — вы уже уверены в его надежности? Потому что пакет подписан ключом мейнтейнера пакета, а ключ мейнтейнера подписан ключом дистрибутива.
Ключ тяжелее украсть, чем аккаунт на популярном сайте.
Очевидно, что npm — не дистрибутив и поэтому владелец npm умается проверять каждого человека, желающего опубликовать свою библиотеку. Но и эта проблема решается сетями доверия.
Просто об этом никто не подумал когда создавал репозиторий. И, кстати, с докером та же проблема.
Мы применяли какое-то время. Включение исключений увеличивало код на 20%. Стандартную библиотеку использовать тоже было практически невозможно, потому что она раздувала код очень сильно. И жрала RAM, которой было не очень то и много.
Поэтому, исключения мы всё-таки оставили, но STL не использовали, реализовывали нужные примитивы вручную.
Что бы вы понимали, мы в 512кб ROM и 128кб RAM упихали RTOS, сетевой стек, графическую подсистему, файловую систему, криптографию, поддержку Unicode, драйвера для всякой периферии и собственно бизнес-логику.
На самом деле у нас только бизнес-логика была написана на С++, что бы упростить жизнь прикладным программистам. Если бы мы всё писали на С++, то оно просто не поместилось бы в МК,
Беда отношений клиента и бизнеса в том, что если они уже связаны договорными отношениями, то один из них может потащить другого в суд. И вот тут как раз встает вопрос экспертизы.
А если шансов попасть в суд нет (например, в договоре написано что клиента всегда неправ), то какой смысл им привлекать третью сторону в свои отношения? Разве что в качестве конкурентного преимущества. Это да — это может сработать.
Сопоставимых по надежности и достоверности с блокчейном способов фиксации я, честно говоря, не знаю.
Сопоставимых — да.
Но я несколько раз натыкался на службы, которые своим авторитетом подтверждали время наступления определенного события. Собственно, наверное, все знают про трюк с отправкой письма самому себе. Но там точность, конечно, в пределах суток-двух. А в эру интернета были сайты которые гарантировали точность в секунды. Но не могу найти ничего подобного сейчас. Да и блокчейн надежней.
Undefined behavior — как раз то, что позволяет компилировать сишный код в эффективный машинный код.
Весь код завернут в монаду IO. Чем это отличается от программирования на любом императивном языке?
Очевидно, что Хаскель совершенно не подходит для таких задач. А вот кодек на нём запрограммировать было бы наверное очень удобно.
Извините, но это абсолютно неверно.
Процессор не может адресовать конкретный бит. У процессора просто не такой команды как «запиши/прочитай бит номер N в памяти». Минимальной адресуемой единицей является байт. У каждого байта есть свой адрес и процессор может читать и писать по байту или больше.
В байте не обязательно восемь бит. Старые компьютеры работали с пяти- или шести- битными байтами. Т.е. у каждой пятерки (шестерки) бит был свой адрес. Сейчас существуют архитектуры, где байт имеет длину 32 бита (DSP всякие). Опять же, это значит что процессор не может прочитать или записать меньше 32 бит за раз. И у каждых 32 бит есть свой адрес.
По определению, байт — это минимальный независимо адресуемый набор данных.
А ровно восемь бит имеет октет. Вы наверное встречали это слово, когда работали с сетями. Дело в том, что через сеть могут быть соединены машины совершенно разных архитектур, с разной длиной байта. Поэтому, что бы не было путаницы, в сетевых протоколах используют слово «октет».
А со «словом» существует ещё большая путаница. Размер машинного слова — это размер регистра.
Раньше, в эпоху 16 битных компьютеров слово состояло из двух байт. Сейчас оно чаще всего состоит из восьми.
Там много интересного. Почитайте PDF. Кроме нескольких RCE (без аутентификации!), атакующий может подключится к вашему устройству, поднять сеть (через профиль PAN), и предложить через DHCP свои статические маршруты, свои DNS сервера и настройки прокси (под виндой). И все это без вашего участия. Атакующему достаточно знать только MAC-адрес вашего устройства.
Высокое дерево — это наоборот дерево с большой вложенностью (википедия тут со мной согласна:
Height of node — The height of a node is the number of edges on the longest path between that node and a leaf.
Height of tree — The height of a tree is the height of its root node.)
А вы поменяли эти два термина местами, из-за чего читать статью очень тяжело.
Ну очевидно что это — не справочник. Тем не менее эта статься дает довольно глубокое понимание того как работают эллиптические кривые.
Аргумент к авторитету. Не катит.
Абсолютно не очевидно. Вся информация есть в свободном доступе. Исходить из предположения что у вероятного противника сидят более глупые математики — неправильно. Надежность алгоритма должна обеспечиваться математическими средствами, а не тем фактом что в нем никто не может разобраться. Эллиптические кривые используют не потому что они такие сложные.
Тем не менее АНБ принимали участие в разработке. И сделали его надежнее, вместо того что бы ослабить. Потому что они тоже не дураки и не хотят что бы вероятный противник сломал их банковскую систему, например.
Они понимают, что если они изобрели новый способ криптоанализа, значит его может изобрести и вероятный противник. Если они сделали закладку, значит эту закладку может найти вероятный противник. Зачем подставлять свою страну?
Как вы думаете, что опаснее в современном мире — то что вероятный противник будет читать ваши военные шифры, или то что он сможет сломать вам банкинг, Интерент и телефонию?
Там нет ничего ужасного. Насколько я помню, теорию множеств преподают ещё в школе.
Если вы программист, то в модульной арифметике разбираетесь, так или иначе.
Понятие группы и кольца вводится прямо в этой статье. Больше ничего сложного вроде нет. Главное — внимательно следить за выкладками.
Тем хуже. Чем больше людей могут понять и найти проблему — тем больше шансов что об этой проблеме узнаю все, а не только те-кому-надо. См. ту же историю с DES и дифференциальным криптоанализом (я её уже упоминал тут).
С другой стороны можно вспомнить известную историю DES. NSА попросили разработчиков алгоритма изменить содержимое S-boxes (таблиц перестановок), но не сказали почему они должны быть именно такими.
Через 20 лет академическое общество (пере)открыло дифференциальный криптоанализ. Оказалось, что S-boxes, предложенные NSA делают DES защищенным от этой атаки. Если бы S-boxes выбирались случайно, то DES был бы намного уязвимее:
В секциях кода — в основном инициализация/деинициализация libc.
Короче, ничего такого страшного. Можно выкинуть всё и дернуть write() руками. Но зачем?
Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 0000001c 0000000000400238 0000000000400238 00000238 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 0000000000400254 0000000000400254 00000254 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .note.gnu.build-id 00000024 0000000000400274 0000000000400274 00000274 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .gnu.hash 0000001c 0000000000400298 0000000000400298 00000298 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynsym 00000060 00000000004002b8 00000000004002b8 000002b8 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .dynstr 0000003d 0000000000400318 0000000000400318 00000318 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version 00000008 0000000000400356 0000000000400356 00000356 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .gnu.version_r 00000020 0000000000400360 0000000000400360 00000360 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .rela.dyn 00000018 0000000000400380 0000000000400380 00000380 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .rela.plt 00000030 0000000000400398 0000000000400398 00000398 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
10 .init 0000001a 00000000004003c8 00000000004003c8 000003c8 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .plt 00000030 00000000004003f0 00000000004003f0 000003f0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .plt.got 00000008 0000000000400420 0000000000400420 00000420 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .text 00000192 0000000000400430 0000000000400430 00000430 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .fini 00000009 00000000004005c4 00000000004005c4 000005c4 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
15 .rodata 00000010 00000000004005d0 00000000004005d0 000005d0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
16 .eh_frame_hdr 00000034 00000000004005e0 00000000004005e0 000005e0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
17 .eh_frame 000000f4 0000000000400618 0000000000400618 00000618 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
18 .init_array 00000008 0000000000600e10 0000000000600e10 00000e10 2**3
CONTENTS, ALLOC, LOAD, DATA
19 .fini_array 00000008 0000000000600e18 0000000000600e18 00000e18 2**3
CONTENTS, ALLOC, LOAD, DATA
20 .jcr 00000008 0000000000600e20 0000000000600e20 00000e20 2**3
CONTENTS, ALLOC, LOAD, DATA
21 .dynamic 000001d0 0000000000600e28 0000000000600e28 00000e28 2**3
CONTENTS, ALLOC, LOAD, DATA
22 .got 00000008 0000000000600ff8 0000000000600ff8 00000ff8 2**3
CONTENTS, ALLOC, LOAD, DATA
23 .got.plt 00000028 0000000000601000 0000000000601000 00001000 2**3
CONTENTS, ALLOC, LOAD, DATA
24 .data 00000010 0000000000601028 0000000000601028 00001028 2**3
CONTENTS, ALLOC, LOAD, DATA
25 .bss 00000008 0000000000601038 0000000000601038 00001038 2**0
ALLOC
26 .comment 00000034 0000000000000000 0000000000000000 00001038 2**0
CONTENTS, READONLY
SYMBOL TABLE:
no symbols
Ключ тяжелее украсть, чем аккаунт на популярном сайте.
Очевидно, что npm — не дистрибутив и поэтому владелец npm умается проверять каждого человека, желающего опубликовать свою библиотеку. Но и эта проблема решается сетями доверия.
Просто об этом никто не подумал когда создавал репозиторий. И, кстати, с докером та же проблема.
Поэтому, исключения мы всё-таки оставили, но STL не использовали, реализовывали нужные примитивы вручную.
Что бы вы понимали, мы в 512кб ROM и 128кб RAM упихали RTOS, сетевой стек, графическую подсистему, файловую систему, криптографию, поддержку Unicode, драйвера для всякой периферии и собственно бизнес-логику.
На самом деле у нас только бизнес-логика была написана на С++, что бы упростить жизнь прикладным программистам. Если бы мы всё писали на С++, то оно просто не поместилось бы в МК,
Беда отношений клиента и бизнеса в том, что если они уже связаны договорными отношениями, то один из них может потащить другого в суд. И вот тут как раз встает вопрос экспертизы.
А если шансов попасть в суд нет (например, в договоре написано что клиента всегда неправ), то какой смысл им привлекать третью сторону в свои отношения? Разве что в качестве конкурентного преимущества. Это да — это может сработать.
Сопоставимых — да.
Но я несколько раз натыкался на службы, которые своим авторитетом подтверждали время наступления определенного события. Собственно, наверное, все знают про трюк с отправкой письма самому себе. Но там точность, конечно, в пределах суток-двух. А в эру интернета были сайты которые гарантировали точность в секунды. Но не могу найти ничего подобного сейчас. Да и блокчейн надежней.