По поводу «несложный» отписал ниже. Попробуйте придумать свой уникальный и криптостойкий алгоритм шифрования, пуст даже простой. Поймете, что не все так просто как кажется на первый взгляд.
RSA намного проще, главное вспомнить малую теорему Ферма.
Вообще не припомню не одного сверх-сложного криптографического алгоритма. Когда все подробно распишут — на первый взгляд просто. Но попробуйте придумать что-то аналогичное... Сразу поймете что не так все просто, как кажется на первый взгляд. Даже оценить криптостойкость алгоритма — уже мало кто сможет.
>>Без тестов ваш код был на 99% правильным, с тестами — на 99.99%. Качество выросло всего на 1 процент, а времени потрачено в 2 раза больше.
Совершенно верно. Нужно только решить насколько критичен этот 1% для конкретного проекта. Если 1% ошибок выльется в процент потерянных денег — то весьма критично.
Во много крат. Не в 2 раза, а именно во много крат. Парадокс, да?
Допустим, в моей системе 100 логических действий, каждое из которых может быть написано с ошибкой (человеческий фактор). В среднем я делаю 1 ошибку на 100 действий. Т.е. в этих 100 действиях есть 1 ошибка (возьмем средний случай).
Если добавить тесты, то в них так-же будет 1 ошибка (так-же 100 действий).
Какова вероятность того, что ошибка будет в одном и том-же месте и в тестах и в программе (речь о машинальной ошибке)? Получается 1 из 10000, верно? Другими словами качество кода повысится в 100 раз, хотя времени затратим только в 2 раза больше.
>>Во-первых, а почему вы решили остановиться на двойной?
Потому что есть 2 стороны: наша система (программа) и внешний мир (пользователь или другая система). С помощью тестов мы эмулируем внешний мир. Третьей стороны нет. Была бы третья — можно было бы делать тройную проверку.
Алгоритм «внешнего мира» не является полным аналогом алгоритма системы.
>>Достаточно того, чтобы одна ошибка скрывала другую.
Бывает и такое. Здесь важна вероятность. По вероятности отпишу ниже.
Лично мне тесты помогают при рефакторинге. Хочу улучшить код (привести к ) — а он потом перестает работать правильно (какая-нибудь мелочь). Вот такие мелочи тесты находят быстро.
>> в слаборазвитые страны типа Зимбабве, России, Украины, Сомали и т.п. запрещено слать продукты высоких технологий, дабы аборигены не отвлекались от собирания кокосов
Люблю Java именно за этот минимализм. Нет ничего лишнего, но есть все необходимое.
Из C# постепенно «все в одном» делают: и запросы, и динамическая типизация, и ФП, и скрипты… Может кому и нравится — не знаю. Как по мне — так для каждой задачи нужно использовать более подходящую технологию, а не совмещать. Но это холивар, конечно.
>>Я помню, что у классика kwm-файл может быть разного размера, соответственно интересно было бы почитать как в случае с изменяющимся размером получить D и Modulus
Это раньше было, теперь размер все время одинаковый. Раньше его раздували простейшим алгоритмом «для безопасности». Смысл, возможно, был, когда у всех было подключение 32 Кбод. Сейчас убрали.
>>Закрытый RSA-ключ, который будет помечен как неэкспортируемый и поэтому его нельзя будет извлечь? Если да, то в случае с хранилищем win* все можно извлечь, правда нестандартным, но довольно простым способом.
С win-хранилища можно (если на ключ не установлен пароль). А вот с eToken — такой возможности нет в принципе — только вместе с устройством.
Добились — хорошее слово. Будете смеяться, но первая реализация вычисляла произведение точки на число 15 минут.
Там умножение в ОНБ. В принципе, оно длительно выполняется. Скорее всего нужно перевести в полиномиальный базис, тогда будет быстрее. В общем, если вы разбираетесь в вопросе — можете посмотреть исходники.
Импорт — здесь сохранение ключа в CSP. После того, как сохранили, извлечь уже не возможно — можно только использовать (у случае с eToken, а то некоторые устройства сами не реализуют подпись).
Если точнее, то d < 1/3 * n ^ (1/4) Если бы можно было d любой длины находить — то смысла в RSA бы не было. Может когда и придумают…
>>Кстати, как там ваш проект реализации ДСТУ поживает?
web.cryptography.org.ua/index.html — там все написано. В общем то, после того как научились генерить ключи и подпись для обоих базисов — дело немножко подвисло. Теперь задача — сделать быструю версию подписи для ОНБ. Надеюсь появится время и займусь. Напишу вам.
Кстати, есть у вас идеи, как (и в каких случаях) можно использовать deviation для ослабления безопасности? У меня парочка есть, но не всегда можно использовать.
Вообще-то они поступили умнее: не называются электронными деньгами или платежной системой. WM просто отображают в своей базе данных наши гражданские отношения.
Или люди не имеют права вступать в гражданские отношения (занимать друг-другу деньги, к примеру). Или не имеют права фиксировать кому чего они должны и кто им сколько должен?
НБУ, похоже, этого никак не поймет…
Нужно либо гражданский кодекс менять и запретить людям финансовые отношения на гражданском уровне (только через банк), или…
На самом деле когда приедете к ним (кстати, куда именно?) — вряд ли будет проще. Нам один раз заблокировали карту и нужно было срочно снять средства — очень долго по кабинетам водили. Причем очереди в некоторые — человек по 15. А это всего-навсего срочная разблокировка карты.
И в онлайне, и в офф-лайне у них построено с расчетом на то, что у человека не выдержат нервы и он плюнет на все и уйдет ни с чем. Кстати, именно так многие и делают.
Почему к ним нет претензий? Вспомните в какой стране живем и какими м$тодами здесь все решается. Именно по этому они позволяют себе делать все что захотят. Да, именно так в наглую кидают, как они говорят, лохов, путем кормления завтраками (подождите, мы вам в течение дня перезвоним).
Принимать платежи, а потом сказать что это пирамида — уже мошенничество. Получается они соучастники в этой пирамиде, т.к. оказывали финансовые услуги и не удосужились проверить в пользу кого (и за что) поступают средства.
Их, конечно, закроют в свое время. Когда на глаза давить будут. А пока работают старыми проверенными м$тодами.
Вообще не припомню не одного сверх-сложного криптографического алгоритма. Когда все подробно распишут — на первый взгляд просто. Но попробуйте придумать что-то аналогичное... Сразу поймете что не так все просто, как кажется на первый взгляд. Даже оценить криптостойкость алгоритма — уже мало кто сможет.
Совершенно верно. Нужно только решить насколько критичен этот 1% для конкретного проекта. Если 1% ошибок выльется в процент потерянных денег — то весьма критично.
Допустим, в моей системе 100 логических действий, каждое из которых может быть написано с ошибкой (человеческий фактор). В среднем я делаю 1 ошибку на 100 действий. Т.е. в этих 100 действиях есть 1 ошибка (возьмем средний случай).
Если добавить тесты, то в них так-же будет 1 ошибка (так-же 100 действий).
Какова вероятность того, что ошибка будет в одном и том-же месте и в тестах и в программе (речь о машинальной ошибке)? Получается 1 из 10000, верно? Другими словами качество кода повысится в 100 раз, хотя времени затратим только в 2 раза больше.
Поправьте меня, если я ошибся.
Потому что есть 2 стороны: наша система (программа) и внешний мир (пользователь или другая система). С помощью тестов мы эмулируем внешний мир. Третьей стороны нет. Была бы третья — можно было бы делать тройную проверку.
Алгоритм «внешнего мира» не является полным аналогом алгоритма системы.
>>Достаточно того, чтобы одна ошибка скрывала другую.
Бывает и такое. Здесь важна вероятность. По вероятности отпишу ниже.
Лично мне тесты помогают при рефакторинге. Хочу улучшить код (привести к ) — а он потом перестает работать правильно (какая-нибудь мелочь). Вот такие мелочи тесты находят быстро.
Спасибо.
>>Буду рад ответить на ваши вопросы
Вы бы могли привести минимальный JS пример, не содержащий ни одного слова?
Как хорошо сказано! Нужно будет запомнить.
Из C# постепенно «все в одном» делают: и запросы, и динамическая типизация, и ФП, и скрипты… Может кому и нравится — не знаю. Как по мне — так для каждой задачи нужно использовать более подходящую технологию, а не совмещать. Но это холивар, конечно.
Вот здесь исходный код на C# для расшифровки ключа: wm-api.svn.sourceforge.net/svnroot/wm-api/trunk/WebMoney.Cryptography/DecryptedKey.cs В самом верху файла — константы. Они повторяют структуру файла kwm.
>>Я помню, что у классика kwm-файл может быть разного размера, соответственно интересно было бы почитать как в случае с изменяющимся размером получить D и Modulus
Это раньше было, теперь размер все время одинаковый. Раньше его раздували простейшим алгоритмом «для безопасности». Смысл, возможно, был, когда у всех было подключение 32 Кбод. Сейчас убрали.
>>Закрытый RSA-ключ, который будет помечен как неэкспортируемый и поэтому его нельзя будет извлечь? Если да, то в случае с хранилищем win* все можно извлечь, правда нестандартным, но довольно простым способом.
С win-хранилища можно (если на ключ не установлен пароль). А вот с eToken — такой возможности нет в принципе — только вместе с устройством.
Добились — хорошее слово. Будете смеяться, но первая реализация вычисляла произведение точки на число 15 минут.
Там умножение в ОНБ. В принципе, оно длительно выполняется. Скорее всего нужно перевести в полиномиальный базис, тогда будет быстрее. В общем, если вы разбираетесь в вопросе — можете посмотреть исходники.
Если точнее, то d < 1/3 * n ^ (1/4) Если бы можно было d любой длины находить — то смысла в RSA бы не было. Может когда и придумают…
>>Кстати, как там ваш проект реализации ДСТУ поживает?
web.cryptography.org.ua/index.html — там все написано. В общем то, после того как научились генерить ключи и подпись для обоих базисов — дело немножко подвисло. Теперь задача — сделать быструю версию подписи для ОНБ. Надеюсь появится время и займусь. Напишу вам.
Кстати, есть у вас идеи, как (и в каких случаях) можно использовать deviation для ослабления безопасности? У меня парочка есть, но не всегда можно использовать.
Дело в том, что не все интерфейсы работают с авторизацией Keeper Light — некоторые только с авторизацией Classic.
Или люди не имеют права вступать в гражданские отношения (занимать друг-другу деньги, к примеру). Или не имеют права фиксировать кому чего они должны и кто им сколько должен?
НБУ, похоже, этого никак не поймет…
Нужно либо гражданский кодекс менять и запретить людям финансовые отношения на гражданском уровне (только через банк), или…
И в онлайне, и в офф-лайне у них построено с расчетом на то, что у человека не выдержат нервы и он плюнет на все и уйдет ни с чем. Кстати, именно так многие и делают.
Почему к ним нет претензий? Вспомните в какой стране живем и какими м$тодами здесь все решается. Именно по этому они позволяют себе делать все что захотят. Да, именно так в наглую кидают, как они говорят, лохов, путем кормления завтраками (подождите, мы вам в течение дня перезвоним).
Принимать платежи, а потом сказать что это пирамида — уже мошенничество. Получается они соучастники в этой пирамиде, т.к. оказывали финансовые услуги и не удосужились проверить в пользу кого (и за что) поступают средства.
Их, конечно, закроют в свое время. Когда на глаза давить будут. А пока работают старыми проверенными м$тодами.