Трунов Д.Н.
Копия статьи, опубликованной 21.07.2015 на сайте https://sites.google.com/site/publicworkstrunov
КОМПЬЮТЕРНАЯ ПРОГРАММА CRYPTOSIGNATURE: ОПИСАНИЕ, НАЗНАЧЕНИЕ И ПРИНЦИПЫ РАБОТЫ
Копия статьи, опубликованной 21.07.2015 на сайте https://sites.google.com/site/publicworkstrunov
Введение
В основе существующих решений проверки подлинности электронных документов, так называемых «цифровых подписей», лежит асимметричное шифрование, то есть системы шифрования с открытым ключом [1, 2]. В общем виде последовательность действий по созданию и проверке цифровой подписи выглядит следующим образом. Автор документа с помощью специальных программ создаёт пару ключей шифрования: открытый и закрытый. Закрытый ключ хранится только у автора, открытый передаётся получателям документа. Документ шифруется закрытым ключом и в зашифрованном виде передаётся вместе с оригиналом получателю. Получатель расшифровывает зашифрованный документ открытым ключом автора и сравнивает его с оригиналом. Если они полностью совпадают – подпись действительна, соответственно, и документ подлинный.
Чтобы избежать шифрования всего документа целиком, в цифровых подписях нашли применение так называемые хэш-функции [2]. Суть этих функций заключаются в том, что результат их вычисления имеет небольшой фиксированный размер, независимо от размера самого документа, а также однозначен и всегда одинаков для одного и того же документа, но различается для других документов. При этом в алгоритме создания и проверки цифровой подписи вместо шифрования и расшифровки всего документа выполняется шифрование и расшифровка только хэш-функции.
Специфика алгоритмов асимметричного шифрования такова, что зашифровать что-либо можно одним ключом, а расшифровать – только вторым. Эти ключи образуют пару и связаны между собой таким образом, что открытый ключ вычисляется на основе закрытого, но закрытый на основе открытого вычислить практически невозможно. Шифрование такого типа и основанные на нём цифровые подписи считаются достаточно надёжными и имеют широкое распространение. В частности, инструменты создания и проверки цифровых подписей предлагаются в хорошо известном пакете программ Microsoft Office [3].
Цифровая подпись без ключей шифрования
Как и обычные подписи на обычных документах, цифровые подписи преследуют три основные цели [2, 3]:
1) предоставление возможности убедиться, что лицо, поставившее подпись – то, кем оно является на самом деле;
2) действительная подпись является гарантией того, что содержимое документа не менялось и не подделывалось после добавления подписи;
3) личная подпись является юридическим гарантом авторства документа.
Цифровые подписи, основанные на алгоритмах асимметричного шифрования, выполняют все три перечисленные цели, однако не лишены и своих недостатков. Самый главный из них связан с хранением закрытого ключа. Если им завладеет злоумышленник, он сможет подписать от имени легального владельца этого ключа любой документ, а опротестовать такую подпись будет весьма сложно. С другой стороны, закрытый ключ может быть утерян владельцем, что создаёт определённые проблемы в случае необходимости подписания новых документов.
Поэтому в качестве альтернативы предлагается рассмотреть возможность применения алгоритмов цифровых подписей, вообще не требующих ключей шифрования. Суть предлагаемого метода заключается в использовании упомянутых выше хэш-функций. Как было сказано ранее, результат вычисления хэш-функции для любого документа будет иметь небольшую фиксированную длину и всегда одинаковое значение для одного и того же документа, и совершенно отличное – для других документов. Если представить эту функцию в понятном для человека виде, например, в виде набора цифр, и подписать обычной подписью, то такая подпись будет равнозначна подписи под самим документом.
Для создания подписи такого типа необходимо по установленному алгоритму вычислить хэш-функцию для подписываемого документа, распечатать на бумажном носителе (или записать вручную) и подписать обычной подписью автора. Чтобы проверить подлинность документа, необходимо повторно вычислить его хэш-функцию и сравнивается с той, под которой стоит обычная подпись автора. Если они совпадают – документ подлинный.
Основное преимущество такого метода – не нужно никаких ключей шифрования. Соответственно, отпадают и проблемы, связанные с их генерацией и безопасным хранением. Кроме того, применение обычной подписи автора само по себе имеет юридическую значимость и удостоверяет личность автора. Но следует отметить, что данный метод предлагается не как замена существующих алгоритмов цифровой подписи, а как дополнительный инструмент установления подлинности электронных документов, имеющий свою область применения.
Алгоритмы криптоподписи CSA-10, CSA-100, CSA-1000 и CSA-10000
В ряде современных информационных систем применяются исключительно цифровые методы проверки достоверности документов, поэтому там просто незаменимы цифровые подписи, основанные на асимметричном шифровании. Во множестве других ситуаций электронные документы предполагается распечатывать и подписывать обычными подписями. Именно в таких случаях и предлагается подписывать не сам документ, а его хэш-функцию, избегая необходимости печати всего документа.
Для этих целей необходим особый алгоритм вычисления хэш-функции, который возвращал бы понятный человеку результат и исключал бы вероятность подделки документа, то есть возможность создания документа с отличным от оригинала содержанием, но точно такой же хэш-функцией. Более того, вероятность подделки документа должна быть исключена не только в настоящем, но также в ближнем и далёком будущем, когда существенно возрастут вычислительные возможности.
Наиболее известные из хэш-функций – MD2, MD4, MD5 и SHA – возвращают результат длиной 128-160 бит и выполняют 3-4 цикла вычисления [2]. Однако для целей долгосрочного хранения подписей было решено применить более «тяжёлые» функции, выполняющие многократно большее количество циклов и возвращающие результат большей длины. Для этих целей был разработан алгоритм вычисления криптоподписи CSA (от CryptoSignature Algorithm) в четырёх базовых модификациях: CSA-10, CSA-100, CSA-1000 и CSA-10000 [4]. Эти алгоритмы производят достаточно сложные вычисления с применением шифрования (отсюда – криптоподпись) и возвращают результат в понятном для человека виде – текстовую строку, состоящую из символов латинского алфавита, цифр и специальных символов.
Количество циклов вычисления зависит от выбранной модификации алгоритма и определяется числом, указанным вместе с названием алгоритма. То есть возможное количество циклов вычисления – 10, 100, 1000 или 10000. Длина подписи по умолчанию равна 40 символам, но на выбор можно взять 10, 20 или 80 символов, а также сократить любую из них до нужного значения. Длину, отличную от 40 символов, рекомендуется указывать вместе с названием алгоритма, например, так: CSA-10[20]. Каждый символ криптоподписи CSA может иметь одно из следующих значений: символы латинского алфавита верхнего (A...Z) и нижнего (a...z) регистров, цифры (0...9), специальные символы (~`!@#$%^&*()_+-=\|”’;:,<.>/?[{}]). Всего 94 возможных символа.
Ниже приведены примеры вычисления криптоподписей для одного и того же файла.
CSA-100: (:H{=,%pP!.d4ykw7j1-yC_)io5^w"0v@8+b,old
CSA-10: _45@PV:uW&\<N<.`zuMy}^#tQf$J0k2~MK;fW<hx
CSA-10[10]: _45@PV:uW&
Надёжность криптоподписей CSA
Под надёжностью криптоподписи будем подразумевать невозможность подделки электронного документа с получением точно такой же его подписи, как и у подлинного. Как обеспечивается такая надёжность, рассмотрим на примере. Допустим, применяется криптоподпись длиной всего 1 символ. При этом существует всего 94 различных варианта подписи. Тогда, если взять 95 различных документов, как минимум, у двух из них подписи будут одинаковыми. Если взять любой документ, который мы считаем подлинным, и создать 94 его уникальных модификаций, хотя бы у одной из них подпись будет точно такая же, как и у подлинного документа.
Надёжная подпись обязана исключать такие ситуации. Возможности современной компьютерной техники позволяют с большой скоростью подбирать требуемые модификации алгоритмически. Значит, чем больше существует вариантов подписи и чем больше времени занимает её вычисление, тем сложнее подобрать требуемую модификацию, и тем надёжнее сама подпись. Так, для подписи длиной 2 символа количество уникальных вариантов составит 94^2 = 8836. Для подписи длиной 10 символов количество вариантов составит 94^10 ≈ 5,4∙10^19.
Предположим, некоторый злоумышленник решил подделать документ, имеющий подпись длиной 10 символов, с помощью специального алгоритма. Допустим также, что на создание новой модификации документа и вычисление подписи этому алгоритму требуется 0,1 секунды компьютерного времени. Тогда, чтобы создать поддельный документ, необходимо проверить до 5,4∙10^19 модификаций, на что может понадобиться до 0,1 * 5,4∙10^19 секунд времени, что приблизительно равно 1,7∙10^11 лет. Можно считать, что такая подделка невозможна.
Программа CryptoSignature
Алгоритмы CSA всех четырёх модификаций реализованы в компьютерной программе CryptoSignature, специально разработанной для вычисления криптоподписей. Программа имеет простой и понятный интерфейс и не сложна в использовании. Написана она в среде разработки Borland Delphi 7.0 и может выполняться на всех операционных системах Microsoft Windows с поддержкой 32-разрядной архитектуры. Не требует установки и готова к работе сразу после запуска исполнимого файла.
Для начала работы нужно запустить файл CryptoSignature.exe, после чего появится главное окно программы, показанное на рисунке 1.
Рисунок 1 – Главное окно программы CryptoSignature
В главном окне имеется четыре функциональные кнопки:
1) «Открыть файл» - вызывает диалоговое окно для выбора и открытия файла, для которого необходимо вычислить криптоподпись;
2) «Вычислить криптоподпись» - вызывает непосредственно функцию вычисления подписи для открытого файла;
3) «О программе» - вызывает справку о программе;
4) «Завершение работы» - выход из программы.
Под кнопками расположена область настроек параметров алгоритма. В частности, можно выбрать одну из четырёх модификаций: CSA-10, CSA-100, CSA-1000 или CSA-10000, а также длину подписи: 10, 20, 40 или 80 символов. По умолчанию установлены алгоритм CSA-10 и длина подписи – 40 символов. Справа от функциональных кнопок и области настроек расположено текстовое поле для вывода результатов вычисления.
Чтобы вычислить криптоподпись нужного файла, необходимо нажать кнопку «Открыть файл». Появится стандартное диалоговое окно открытия файла (рисунок 2), в котором нужно выбрать нужный файл и нажать кнопку «Открыть».
Рисунок 2 – Диалоговое окно открытия файла
После открытия выбранного файла в текстовом поле программы отобразятся основные сведения о нём: краткое имя файла (без пути к нему), размер файла, указанный в байтах, а также дата и время его последнего изменения. После этого программа готова к вычислению криптоподписи.
Рисунок 3 – Файл открыт, программа готова к вычислению
Непосредственно для вычисления необходимо нажать кнопку «Вычислить криптоподпись». Перед этим можно изменить параметры вычисления (алгоритм и длину подписи) или оставить их по умолчанию. По завершению вычисления подпись с названием алгоритма появятся в том же текстовом поле под сведениями о файле (рисунок 4).
Рисунок 4 – Результат вычисления подписи
Стоит обратить внимание, что вычисление подписи иногда бывает очень длительным, особенно если выбран алгоритм с большим количеством циклов, или же открыт файл большого объёма. Для контроля процесса вычисления в самом его начале открывается дополнительное окно, в котором отображается прогресс вычисления (в процентах). По завершению процесса это окно закрывается автоматически. Если же вычислительный процесс оказывается слишком длительным, его можно искусственно прервать, нажав на кнопку «Отменить» (рисунок 5), после чего в главном окне можно выбрать другие параметры вычисления и повторить процесс.
Рисунок 5 – Окно контроля вычисления криптоподписи
Применение криптоподписей
Процедура создания и проверки криптоподписей описанного типа достаточно проста. Для подписания электронного документа необходимо открыть файл этого документа и вычислить его криптоподпись. Вместе со сведениями о файле (имя файла, описание, размер, дата создания и т.д.) эту подпись необходимо распечатать, снабдив распечатку также сведениями об авторе. Затем эту распечатку необходимо подписать обычной подписью автора. При необходимости можно добавить мокрые печати, подписи соавторов, руководителей и контролирующих лиц. После этих процедур документ считается подписанным, а его криптоподпись – достоверной.
Для проверки подлинности электронного документа повторно вычисляется его криптоподпись по тому же алгоритму. Затем она просто сравнивается с той, под которой стоит обычная подпись (подписи) автора и прочих лиц. Если вычисленная и достоверная криптоподписи полностью совпадают, документ считается подлинным и обладает такой же юридической силой, как если бы документ был распечатан полностью и подписан теми же лицами. Одно важное требование: необходимо создать должные условия хранения подлинных электронных документов, дабы исключить возможность их потери или искажения при длительном хранении.
В качестве альтернативы распечатки криптоподписи можно применить более современные инструменты, например, поместить вычисленную подпись в специальное электронное хранилище под собственным именем. Главное, чтобы к такому хранилищу было доверие со стороны всех участников работы с подписями, то есть теми, кто ставит подписи, и теми, кто их проверяет. Для этого электронное хранилище криптоподписей должно проводить идентификацию лиц, размещающих свои подписи, разрешать свободный поиск и просмотр подписей, но запрещать их удаление или изменение, в том числе – даже владельцами подписей.
Заключение
Криптоподписи обладают несколькими важными преимуществами перед традиционными цифровыми подписями. Во-первых, они не требуют никаких ключей шифрования, что сразу снимает целый ряд проблем, связанных с созданием и хранением таких ключей. Во-вторых, срок действия криптоподписей потенциально неограничен, чего нельзя сказать о традиционных цифровых подписях, ключи которых имеют срок действия 1-5 лет.
На примере программы CryptoSignature показано, что работа с криптоподписями является достаточно простой и понятной. Сам процесс вычисления выполняется в три шага: запустить программу, открыть файл документа, вычислить для него криптоподпись. При необходимости, вычисленную подпись можно скопировать в любой другой документ для печати или иных целей. Для заверки криптоподписи остаётся только поставить под ней свою обычную подпись.
Следует учесть, что рассмотренные в данной статье алгоритмы вычисления криптоподписей и работающая на их основе программа CryptoSignature носят ознакомительный характер и приводятся исключительно в качестве примера. В каждом конкретном случае могут применяться похожие или отличные алгоритмы, программы и принципы установления и проверки подписей электронных документов.
Источники информации
1. Ерош И.Л. Дискретная математика. Математические вопросы криптографии: Учеб. пособие / СПбГУАП. СПб, 2001. – 56с.
2. Баричев С. Криптография без секретов – http://www.bnti.ru/dbtexts/ipks/old/analmat/1_2002/crypto4.pdf - 08.07.2015
3. Справочная система Microsoft Office Word 2007 > Безопасность и конфиденциальность > Цифровые идентификаторы и подписи > Цифровая подпись в документе Office
4. Трунов Д.Н. Особенности и характеристики алгоритмов вычисления криптоподписей CSA-10, CSA-100, CSA-1000 и CSA-10000. – https://sites.google.com/site/publicworkstrunov, 05.04.2015
Комментариев нет:
Отправить комментарий