Цифровая подпись осноанная на RSA/DSA

Тема в разделе "WASM.CRYPTO", создана пользователем slesh, 5 янв 2011.

  1. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Что-то искал ответа на вопрос в доках по RSA, но так и не нашел.
    Собственно говоря система такая:
    1) Есть модульная система. Каждый модуль можно обновлять когда потребуется
    2) В программу вшит RSA ключ для расшифровки данных (т.е. по идее это закрытый ключ RSA)
    3) Когда требуется обновить модуль какой нибудь, то для него вычисляется хеш сумма (через SHA-2) далее этот хеш шифруется открытым ключем RSA (который по идее имеет только разработчик модулей)
    4) При обновлении модулей в программу передается сам файл модуля и шифрованных хеш, программа вычисляет хеш для файла, затем расшифровывает своим ключем присланный хеш и сверяет их.

    Везде написано что из Открытого ключа (ключа шифрования) нельзя получить Закрытый ключ (ключ расшифровки), даже есть имеется сам текст который был зашифрован. А тут задача получается обратная.
    Т.е. мы имеем и данные которые шифровались и ключ расшифровки имеем, то возможно ли вычислить ключ шифрования ?
    Конечно же его можно вычислить, но вот какая сложность будет этого.

    Думал вместо этого использовать DSA (по сути подобная система, но там уже сказано что из закрытого ключа нельзя получить открытый ключ), но по DSA так и не нашел нормальных реализаций. Может кто нибудь имеет нормальную реализацию RSA ? (только как можно меньше, а не на пару метров)
     
  2. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Вот Вы в заголовке вроде бы упомянули правильный термин - "Цифровая подпись", а в описании задачи рассказываете совершенно другое. Что же в итоге Вам нужно - в чем задача ?

    1) Задача добиться, чтобы каждый модуль был передан от разработчика к пользователю без искажений (защита целостности). Тогда Вам нужна именно ЭЦП, но реализуется она совершенно наоборот :
    а) закрытый ключ известен только разработчику,
    б) подписание хеша модуля происходит именно закрытым ключом,
    в) в каждой инсталляции программы зашит открытый ключ, которым проверяется целостность присланного обновления.
    По открытому ключу вычислить закрытый невозможно.

    (Взламывают такую защиту подменой открытого ключа или заменой условного перехода после проверки).

    2) Задача добиться, чтобы модуль в процессе передачи от разработчика к пользователю не был украден третьими лицами (защита конфиденциальности). Проще всего реализуется симметричными ключами.

    (Взламывают такую защиту обычно покупкой одной официальной лицензии).

    По поводу реализации : найдите интерфейс к OpenSSL для вашего языка программирования.
     
  3. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Всё разобрался. Плоховато википедию перечитывал. Оказывается закрытым ключем можно не только расшифровывать но и шифровать.