Comments 25

Появилась идея… Возможно, немного бредовая. Выдавать зашифрованный пакет на запрос с сервера, клиент пытается его расшифровать.
В пакете содержится уникальный ключ. Потом клиент отправляет серверу свой email с этим ключём.
Случайность заключается именно в расшифровке пакета на стороне клиента.
Итого, пойдут те первые %n% кто пришлет свой email.
Как вариант, написал по "фану" :)

P.S. Ну а варианту автора я всеравно не доверяю. Кто его знает, может он демона в фоне запустил, который в рантайме байткод меняет или компилятор кастомный
Ну так запустите на своей машине. Со своим компилятором и своими демонами. Строку для seed-а я запушил.
Email-ы возьмите из eparts.txt

Идея прикольная, кстати. Но мы хотели чтобы участвовали все, а не только те кто пришел посмотреть дод.
Сид формировал через вызов hashCode() у строки
Вот так
    public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

Проверьте, у вас hash для строки из чата будет тот же что и у меня. В логах на видео он есть.

Что мешало подменить код?) Сфабриковать можно все что угодно :)

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

Если у вас нет паранои, это не значит что за вами не следят.

Достаточно подговорить последнего, чтобы он написал определенную фразу, которая скорректирует значение до "нужного".

Подговорить одних писать определенный текст, а других подговорить не писать? так проще тупо всем билеты раздать. Стоимость защиты, как и стомость взлома не должна превышать стоимости защищаемого/взламываемого.
С этим можно бороться так:
брать hash не последней строки, а всего чата с какого-то времени до какого-то времени.
Или суммы первых слов, всех первых букв всех слов или как-то так…
Тогда будет достаточно любого лишнего комментария что-бы сид изменился.
1) Каждый может проверить что он есть в списке емейлов под определенным номером
Хешируем все емейлы, публикуем упорядоченный список хешей, использованный алгоритм (например, SHA-256) и использованную соль. Каждый может посчитать хеш для своего емейла, и найти его в списке под определенным нормером.

2) Выбираем ГПСЧ.
Не надо изобретать велосипед. Публикуем, что будет использоваться ГПСЧ из такой-то библиотеки такой-то версии. Каждый может запустить и проверить потом.

3) Выбор seed ГПСЧ.
Публикуем алгоритм выбора seed. Он должен быть легко-верифицируемым и трудно-подделываемым. Как вариант, алгоритм должен быть основан на публичных данных, которые еще не известны на момент публикации самого алгоритма.
Например, берем газету New York Times, номер который должен выйти в день розыгрыша, выбираем первые буквы первых 10 слов на 2 странице. Легко проверить даже спустя годы после розыгрыша (найти архив газеты), трудно подделать (если нет знакомого редактора в NY Times)

Пункт 3 "трудно подделываемый" должно значить "трудно сформировать желаемый seed", а не "трудно подменить seed постфактум".

Эм… У вас в коде для выбора email-ов нет защиты от многократного попадания одного и того же ящика в список победителей.


List<String> draw(List<String> emails) {
        System.out.println("Draw for the seed: " + seed);
        Random rnd = new Random(seed);
        Set<String> winners = new HashSet<>();
        while (winners.size() < Math.min(winnersCount, emails.size())) {
            int index = rnd.nextInt(emails.size());
            System.out.println("Ball: " + index);
            winners.add(emails.get(index));
        }
        return new ArrayList<>(winners);
}

Я думаю Regis имел ввиду, что еmails — это лист, и в нем 1ый, 5ый и 27 может быть один и тот же емейл, а значит и вероятность выбора его из этого списка выше. Весь код я не смотрел, может в нем и есть защита.

Даже выкладка файла email'ов ничего не гарантирует — нет уверенности, что запущена программе на вход был дан настоящий список.

Для достоверности надо опубликовать список хэшей адресов, скажем, SHA-256. Ну выбирать, соответственно, хеши победителей. В качестве долполнительного теста — пусть сами проверяют, не их ли почта выиграла. При таком подходе каждый сможет убедиться, что его почта действительно участвовала в розыгрыше.
Only those users with full accounts are able to leave comments. Log in, please.
Information
Founded

1 May 2017

Location

Россия

Website

otus.ru

Employees

31–50 employees

Registered

22 March 2017