Все мы немножко тролли
Требуется:
Каким-то образом промаркировать 1000 совершенно одинаковых карточек так, чтобы:
1. Каждая стала уникальной
2. Человек, который маркировал их, не уловил закономерности.
3. Человек, знающий закономерность, смог сказать, существует такая карта или нет.
В общем, видимо, нужен простой в нанесении на бумагу шифр.
Каким-то образом промаркировать 1000 совершенно одинаковых карточек так, чтобы:
1. Каждая стала уникальной
2. Человек, который маркировал их, не уловил закономерности.
3. Человек, знающий закономерность, смог сказать, существует такая карта или нет.
В общем, видимо, нужен простой в нанесении на бумагу шифр.
В уме или после вычислений на бумаге, на калькуляторе, на компьютере?
Самоё надёжное - зашифровать с помощью секретного ключа и некоторого криптоалгоритма числа 1..100 и нанести комбинации на карточку.
Еще есть избыточное кодирование: когда пишем
0121739271 - карточка 12, 1739271 - проверочные символы, для каждого номера карточки они определяются однозначно с помощью некоторого алгоритма.
осуществимость пункта зависит ТОЛЬКО от любознательности и сообразительности маркировщика.
Неверное утверждение.
Стойкость шифра может быть обеспечена ТОЛЬКО секретным ключом, а знание алгоритма при этом не поможет.
См. Принцип Керкгоффса в википедии.
вам придется не сладко... 1000 это очень много. и если человеку не 5 лет.... то уловит. особенно если взять какую нить прогрессию типа фибоначи которую все знают.
Штрихкод хорош, но он требует тысячи разных макетов карт+дорогостоящего оборудования.
Тогда злоумышленник может просто наделать много карточек с одинаковым номером - одну (валидную) отдать вам, а остальными идентичными (такими же валидными) пользоваться сам.
если он внимателен, или любознателен и, при этом, не идиот, то наличие последовательности он обнаружит. далее, ежели достаточно любознателен и сообразителен, то закономерность он ужучит. другое дело что он может не понять, что за инфа кодится, но последовательность продолжить сможет.
Я могу предложить сколько угодно последовательностей, закономерность которых угадать нельзя (но можно найти в интернете некоторые).
1) 4, 58, 148, 196, 334, 482, 626, 980, 1160, 1468, 1798, 2138, a(n) = p(n)*p(n+2) - 3*p(n+1), где p(n) это n-тое простое число.
2) 1, 2, 5, 14, 25, 26, 98, 125, 182, 286, 338, 425, 602, 625, 686, 1166, 1274, 2366, 2926, 3125, 4082, 4214, 4394, 4802, 6202, 7546, 7826, 8918, 9875, 11075, 14375 - это такие n, которые делят 10^n + 9^n + 1.
3) 24, 43, 63, 89, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 132, 135, 142, 153, 175, 209, 224, 226, 262, 264, 267, 283, 284, 332, 333, 334, 357, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 407, 445, 463, 518, 568, 598, 629, 739 - забавная последовательность, "энергетические числа" - такие числа, которые можно разбить на две и более частей, возвести эти части в некоторую положительную степень, сложить и они будут равны искомому числу. Пример: 357 = 3^2 + 5^1 + 7^3, 8833 = 88^2 + 33^2.
Тогда бы информационная безопасность не могла бы существовать в принципе.
Информационная безопасность немного не так работает, да.
пусть надо занумеровать 1000 карточек
номер карточки будет состоять из 7 цифр
первые 3 цифры - это её порядковый номер (N=000...999)
последние 4 цифры - это контрольная сумма (вычисляем число (N+3333)^2, оно будет 8-значным, из него берём средние 4 цифры)
хрен угадаешь эту закономерность
человек, знающий секрет, без труда вычислит контрольную сумму на простом калькуляторе (или даже в уме, если шибко умный)
То, что это квадратичная зависимость, будет очень хорошо видно, если иметь весь этот массив из 1000 чисел... Разными способами - например, на графике. Или можно рассчитать a[i+1] - a[i] - будет офигительно ровная слабо возрастающая прямая. Останется чуток подогнать параметры. Немного школьной математики - и такой "шифр" будет раскрыт.
На самом деле главная угроза - обезопасить себя от одинаковых копий карт. Вся эта кодовая система с треском провалится, если просто сделать две карточки с одинаковыми номерами.
Вычислим контрольную сумму так:
A = N+3333 <- четырёхзначное число
B = reverse(A) <- четырёхзначное число, в котором цифры числа A идут в обратном порядке
C = A*B <- 8-значное число
контрольная сумма - это 4 средних цифры числа C
На калькуляторе это легко подсчитает любой тупой школьник за 5 секунд
Ну и как ты догадаешься теперь, кулхацкер?
В уме хэш не рассчитать, но для этого спецпрограммку для ПК/КПК/телефона наваять - дело десяти минут.