Электронная подпись: практическое использование на предприятии программного продукта CyberSafe Enterprise. Часть первая
Все мы привыкли к термину «электронная цифровая подпись», однако сейчас правильнее использовать другой термин — «электронная подпись», поскольку в апреле 2011 года вступил в силу Федеральный закон № 63-ФЗ «Об электронной подписи» (далее просто закон «Об электронной подписи»).
Именно этот закон пришел на смену закона № 1-ФЗ «Об электронной цифровой подписи». Поэтому то, что раньше мы назвали «электронной цифровой подписью» теперь называется просто «электронной подписью»....
Что такое электронная подпись?
Для измерения сложности пароля используется понятие энтропии.В этой части статьи речь пойдет об использовании электронной подписи на коммерческом предприятии. Сначала мы рассмотрим, в каких случаях электронная подпись станет полезной и пригодится на каждом предприятия, а затем рассмотрим ее практическое использование. Прежде всего, нужно сказать, что такое электронная подпись. Это информация, которая присоединяется к другой информации (к подписываемой информации) с целью определения лица, подписавшего информацию, а также факта неизменности информации после ее подписания. В самом же законе «Об электронной подписи» сказано следующее: «электронная подпись — информация в электронной форме, которая присоединена к другой информации в электронной форме (подписываемой информации) или иным образом связана с такой информацией и которая используется для определения лица, подписывающего информацию». Таким образом, главная задача электронной подписи — установить авторство документа и гарантировать, что документ не был изменен после его подписания. Если вникнуть в закон «Об электронной подписи», то электронная подпись бывает простой и усиленной. Простая электронная подпись подтверждает лишь факт электронного подписания документа определенным лицом. Усиленная электронная подпись, в свою очередь, делится на усиленную неквалифицированную и усиленную квалифицированную. Усиленная неквалифицированная электронная подпись позволяет: Определить лицо, которое подписало электронный документ; Определить факт изменения документа после подписания (чего не позволяет простая электронная подпись). Также усиленная неквалифицированная ЭП должна быть получена в результате криптографического преобразования информации с использованием ключа электронной подписи. Усиленная квалифицированная ЭП — то же самое, что и усиленная неквалифицированная, но ключ проверки ЭП указан в квалифицированном сертификате, а для создания и проверки ЭП используются средства, получившие подтверждение соответствия требованиям, которые установлены законом «Об электронной подписи». Рассматриваемая далее программа CyberSafe предлагает как раз вариант усиленной квалифицированной ЭП.Случаи использования электронной подписи на предприятии
Внутренний документооборот Самый распространенный вариант внутреннего документооборота предприятия — это служебные записки. Больше нет смысла распечатывать документ и подписывать его собственноручно, если можно подписать его цифровой подписью и отправить дальше по цепочке. Электронная подпись здесь экономит не только время, но и деньги — снижается расход бумаги и тонера принтера. Конечно, себестоимость одного распечатанного листа бумаги может и не сильно высока, но за год можно сэкономить вполне приличную сумму, и это уже не говоря о времени, которое сегодня стоит дорого. Как правило, на предприятии используются сетевые принтеры. Сетевой принтер может быть расположен в другом кабинете или вообще на другом этаже. Сотруднику, распечатавшему служебную записку, нужно выйти из своего кабинета, добраться до принтера и найти среди остальных документов свою записку. На все про все тратится 10-15 минут, а если учитывать человеческий фактор (разговоры с сотрудниками в соседнем кабинете), то гораздо больше. В итоге, эти 10-15 минут могли бы быть потрачены более продуктивно, чем поиск распечатанного документа. Второй пример — это процесс согласования договора. Представим, что сотрудник Иванов подготавливает договор и отправляет его на согласование руководителю. Принцип такой же, как и со служебной запиской — зачем тратить время на печать говора, если можно подписать его электронной подписью? Руководитель вносит изменения в договор, подписывает его и отправляет Иванову. Учитывая, что изменений будет много (ведь ошибки все равно неизбежны), использование электронной подписи опять экономит много времени и средств. В больших корпоративных сетях, где у руководителя и даже у рядового сотрудника Иванова могут быть недоброжелатели электронная подпись — это надежный способ убедиться в авторстве документа и его неизменности (что никто без ведома Иванова или его руководителя не внес в него какие-то изменения). Вы можете возразить, мол есть права доступа и видно, кто последний раз редактировал документ. Зачем нужна электронная подпись? Все как бы правильно, если бы не одно но. В любой системе есть пользователь с максимальными правами — администратор, который может не только изменить сам документ, но и его атрибуты (в том числе время/дату изменения, автора последнего изменения и т.д.). Обмен документами с филиалами и партнерами При обмене информацией с удаленными филиалами и партнерами компании обычно используется электронная почта. И здесь можно использовать электронную подпись, чтобы ваши партнеры и сотрудники удаленных филиалов могли быть уверены в том, что это сообщение отправили именно вы, а не кто-то, кто хочет вами казаться. Да, пока нет практики заключения договоров полностью в электронном виде. Все равно еще необходима мокрая печать и подпись. Поэтому скрепить договор с партнером в полностью электронном виде не получится. Но зато вы можете безопасно обмениваться сообщениями с вашими партнерами и не сомневаться, что кто-то подделает ваше сообщение или сообщение партнера. Что же касается обмена документами с удаленными филиалами, то здесь можно использоваться электронную подпись, как и при внутреннем документообороте. Сейчас документооборот между филиалами проходит в полуцифровой форме. А именно: документ сначала нужно распечатать, затем его должен подписать руководитель, после чего секретарь руководителя его сканирует и отправляет по электронной почте в удаленный филиал, где он опять распечатывается. Электронная подпись позволяет сократить этот процесс: документ подписывается электронной подписью и отправляется в удаленный филиал, где получатель может проверить электронную подпись и убедиться, что документ был подписан именно руководителем. Некоторые проблемы внедрения электронной подписи на предприятии Пока еще человеку трудно привыкнуть к электронной подписи и к ней не относятся как к чему-то серьезному. Пока на документе не будет стоять «мокрая» подпись его, по-прежнему, не считают подписанным. Сотрудники все еще будут использовать копии бумажных документов, терять свои закрытые ключи, не считая их чем-то важным. Как преодолеть психологический барьер? Как преодолеть то самое «без бумажки — ты букашка, а с бумажкой — человек»? Оказывается, выход есть и он заключается в еще одной бумажке. Нужно внутри предприятие принять «положение об электронном документообороте». Все сотрудники должны ознакомиться с ним и скрепить принятие этого положения своей подписью, пока что не электронной. Тогда сотрудники поймут, что все серьезно — ведь их просят поставить подпись. После этого они начнут пользоваться электронной подписью, станут серьезно относиться к своим закрытым ключам и т.д. Помимо психологического барьера есть еще один — образовательный. Опытному сотруднику со стажем, которому до выхода на пенсию осталось несколько лет, довольно трудно будет объяснить, что такое электронная подпись и как ее правильно использовать. Он относительно недавно освоил работу с обычной электронной почтой, а тут асинхронная криптография, открытые и закрытые ключи и т.д. Вот это и есть основная проблема, с которой я столкнулся относительно недавно на собственном опыте. Решение есть, но оно не такое простое, как в первом случае. На первых порах задачу обучения работе с электронной подписью можно возложить на плечи IT-отдела. Если ничего не получится, тогда уже можно перейти к услугам сторонних специалистов. Ведь есть же тренинги по работе с компьютером, офисными приложениями, электронной почтой. Аналогично, можно найти курсы, посвященные современному документообороту. Как и со всеми нововведениями, нужно быть к готовым к волне неприятия. Но, когда сотрудники поймут, насколько хороша электронная подпись, они перестанут работать по старинке. Чтобы облегчить переход на электронную подпись, нужно в том самом положении, о котором только шла речь, предусмотреть некоторый переходной период, когда еще можно пользоваться обычными подписями. Только не нужно устанавливать слишком большой срок, в противном случае все будут продолжать пользоваться обычными подписями. Есть еще одна проблема, но она технического характера, следовательно, решается довольно просто. Для работы электронной подписи нужен удостоверяющий центр (УЦ) электронной подписи или центр сертификации. В законе «Об электронной подписи» четко сказано, что такое УЦ: Удостоверяющий центр — юридическое лицо или индивидуальный предприниматель, осуществляющие функции по созданию и выдаче сертификатов ключей проверки электронных подписей, а также иные функции, предусмотренные настоящим Федеральным законом Следовательно, удостоверяющий центр придется или создать собственный, или же использовать внешние центры, например, центр сертификации CyberSafe. Основная задача УЦ — выдача криптографических сертификатов и подтверждение их подлинности. Практическая часть Прежде, чем перейти к практической части нашей статьи, нужно поговорить о выборе программного обеспечения. Почему стоит остановить свой выбор на продуктах CyberSoft? Во-первых, компания-разработчик имеет все необходимые лицензии ФСБ и ФСТЭК, в чем вы можете убедиться по адресу: cybersafesoft.com/rus/certificates/ Во-вторых, исходный код библиотеки, которая используется программными продуктами CyberSafe, открыт всем желающим и каждый может убедиться в надежности используемых в программных продуктах решений и в том, что в программе нет никаких «дыр», «лазеек», backdoors и прочих недоразумений. Раз исходный код выложен на всеобщее обозрение, значит, компании скрывать нечего. Попробуйте найти исходный код того же BitLocker от Microsoft. Теперь немного конкретики. Исходный код библиотеки шифрования доступен по адресу: www.assembla.com/spaces/cybersafe-encryption-library/wiki А ссылка на него есть на главной странице сайта cybersafesoft.com/rus/. Для шифрования и подписи используется функция SMIME_OSSL_Sign(), код которой приведен в листинге 1. Как видите, реализация использует OpenSSL, на работу которого много лет не было никаких нареканий. Листинг 1. Функция SMIME_OSSL_Sign(), используемая для шифрования и подписи сообщения/документа function SMIME_OSSL_Sign( AFileSpec, ACertFileSpec: String; out ErrMesg: String; SMIME: Boolean = False): Boolean; function getCertInfo(certSpec: String; var ACert: PX509; var AKey: PEVP_PKEY): Boolean; var tbio: PBIO; cert: PX509; key: PEVP_PKEY; begin Result := False; tbio := nil; // Читаем сертификат и приватный ключ // must contain "BEGIN\END CERTIFICATE" and "BEGIN\END RSA PRIVATE KEY" tbio := BIO_new_file(PAnsiChar(AnsiString(certSpec)), 'r'); if tbio = nil then Exit; try ACert := PEM_read_bio_X509(tbio, nil, nil, nil); BIO_reset(tbio); AKey := PEM_read_bio_PrivateKey(tbio, nil, nil, nil{PAnsiChar(pass)}); Result := (ACert <> nil) and (AKey <> nil); finally if Assigned(tbio) then BIO_free(tbio); end; end; var scert: array of PX509; skey: array of PEVP_PKEY; i: Integer; inf, outf: PBIO; certs: TStringList; cms: PCMS_ContentInfo; outFileSpec: String; flags: Cardinal; begin Result := False; SSL_InitBIO; SSL_InitEVP; SSL_InitPEM; SSL_initSk; SSL_InitPKCS7; SSL_InitCMS; SSL_InitERR; SSL_InitX509; OPENSSL_add_all_algorithms_noconf(); OpenSSL_add_all_ciphers; OpenSSL_add_all_digests; ERR_load_crypto_strings(); certs := TStringList.Create; try StrToStrings(ACertFileSpec, ',', certs); if certs.Count = 0 then begin ErrMesg := stNoSignCertificates; Exit; end; SetLength(scert, certs.Count); SetLength(skey, certs.Count); for i := 0 to certs.Count - 1 do begin scert[i] := nil; skey[i] := nil; end; // Open content being signed inf := BIO_new_file(PAnsiChar(AnsiString(AFileSpec)), 'r'); if (inf = nil) then begin ErrMesg := Format(stErrorOpenFile, [AFileSpec]); Exit; end; flags := CMS_BINARY or CMS_PARTIAL or CMS_STREAM; cms := CMS_sign(nil, nil, nil, inf, flags); if (cms = nil) then begin ErrMesg := Format(stErrorSignFile, [AFileSpec]); Exit; end; for i := 0 to certs.Count - 1 do if getCertInfo(certs.Strings[i], scert[i], skey[i]) then begin if CMS_add1_signer(cms, scert[i], skey[i], nil, 0) = nil then begin ErrMesg := stErrorAddSigner; Exit; end; end; outFileSpec := GetTmpFileSpec; outf := BIO_new_file(PAnsiChar(AnsiString(outFileSpec)), 'w'); if (outf = nil) then begin ErrMesg := Format(stErrorCreateSignedFile, [AFileSpec]); Exit; end; // Выводим сообщение S/MIME { if SMIME_write_CMS(outf, cms, inf, flags) = 0 then begin ErrMesg := Format(stErrorWriteFile, [outFileSpec]); Exit; end; } if i2d_CMS_bio_stream(outf, cms, inf, flags) = 0 then begin ErrMesg := Format(stErrorWriteFile, [outFileSpec]); Exit; end; finally if Assigned(cms) then CMS_ContentInfo_free(cms); if Assigned(inf) then BIO_free(inf); if Assigned(outf) then BIO_free(outf); for i := 0 to certs.Count - 1 do begin if Assigned(scert[i]) then X509_free(scert[i]); if Assigned(skey[i]) then EVP_PKEY_free(skey[i]); scert[i] := nil; skey[i] := nil; end; certs.Free; end; if FileExists(outFileSpec) then begin try DeleteFile(AFileSpec); CheckCopyFile(outFileSpec, AFileSpec); DeleteFile(outFileSpec); Result := True; except on E: Exception do ErrMesg := E.Message; end; end; if not Result then begin ErrMesg := Format(stErrorSignFile, [AFileSpec]); end; end; В-третьих, программа CyberSafe Enterprise может работать в качестве удостоверяющего центра. Следовательно, можно считать, что третью, техническую, проблему вы уже решили. Теория и всякие рассуждения и размышления ничего не значат без практики. Рассмотрим использование программы CyberSafe для подписи служебных документов. Установите программу CyberSafe. При первом запуске программы обязательно нужно принять сертификат от CyberSoft CA. В принципе, об этом написано в руководстве по программе, но лучше лишний раз об этом сказать, чем не принять сертификат.
Рис. 1. Первый запуск программы Далее переходим в Ключи и сертификаты, Личные ключи и нажимаем кнопку Создать. В появившемся окне введите адрес электронной почты, пароль, ваше имя и фамилию, чтобы вашим сотрудникам сразу было ясно, кому принадлежит сертификат. Выберите срок действия сертификата и длину ключа. Для мощных компьютеров лучше выбрать максимальную длину ключа, для не очень мощных — 4096 бита. Помните, чем длиннее ключ, тем надежнее защита. Обязательно включите переключатель Опубликовать, после создания — ваш сертификат будет автоматически опубликован на сервере CyberSafe и ваши сотрудники смогут легко его найти. Если вы не собираетесь создавать собственный сервер сертификатов или использовать какой-то внешний сервер, то публикация сертификата на сервере CyberSafe — оптимальное решение. Если вы поспешили и не включили этот переключатель, не беда: после создания сертификата выделите его и нажмите кнопку Публик
Рис. 2. Создание сертификата Нажмите кнопку Далее и подождите, пока программа завершит создание сертификата (рис. 3).
Рис. 3. Сертификат создан Нажмите кнопку Готово. Затем программа попросит вас подтвердить ваш e-mail. На него будет выслан код подтверждения, который нужно будет ввести в появившееся окно (рис. 4).
Рис. 4. Вводим код подтверждения для публикации сертификата Далее вы получите сообщение о том, что сертификат успешно опубликован (рис. 5). Думаю, не нужно говорить, что для публикации сертификата на сервере CyberSafe необходим доступ к Интернету.
Рис. 5. Сертификат успешно опубликован Ваши коллеги также должны установить CyberSafe и пройти процедуру создания сертификата и его публикации на сервере CyberSafe. Для поиска сертификата коллеги по его e-mail нажмите кнопку Поиск и введите e-mail (рис. 6). Далее вам нужно добавить сертификат вашего коллеги, а ему нужно добавить ваш сертификат.
Рис. 6. Добавление сертификата коллеги Посмотрите на рис. 7. Ваш сертификат отображается в списке как пара ключей — открытый и закрытый ключ. Добавленные с помощью кнопки Поиск сертификат коллег отображаются в виде одного ключа и содержат только открытые (публичные) ключи ваших коллег.
Рис. 7. Список ключей и сертификатов Теперь попробуем зашифровать и подписать служебную записку. Создайте служебную записку в любом текстовом редакторе. Это может быть Word, а может просто Блокнот — суть от этого не изменится. Перейдите в раздел Эл. цифровая подпись, Подписать и нажмите кнопку Доб. файлы. Выберите созданную ранее служебную записку (рис. 8). Вы можете выбрать несколько файлов сразу или даже всю папку (используя кнопку Доб. папку), но сейчас для простоты примера будем работать с одним файлом. Выделите его и нажмите кнопку Далее.
Рис. 8. Добавлена служебная записка Выберите вариант шифрования файла — Зашифровать файлы ключами получателей (рис. 9). Это означает, что для шифрования файла будут использованы открытые ключи получателей. Если вы не выберите свой ключ, то даже вы не сможете расшифровать этот файл, несмотря на то, что вы его зашифровали (рис. 10).
Рис. 9. Шифрование файлов для передачи другим лицам
Рис. 10. Выбор получателей файла Для эксперимента я не выбрал свой сертификат (рис. 10) и при попытке расшифровать файл, который сам только что зашифровал, получил сообщение Ошибка расшифровки файла! Возможно файл зашифрован другим ключом. Далее из списка Подписать личным ключом нужно выбрать свой ключ, чтобы программа подписала записки от вашего имени. Можно выбрать алгоритм шифрования и длину ключа. Для начала шифрования нажмите кнопку Шифров. Программа сообщит, что наш файл зашифрован успешно (рис. 12). Из рис. 12 видно, кто подписал документ и кому он предназначен (кто может его прочитать).
Рис. 11. Подписываем записку своим ключом
Рис. 12. Записка зашифрована Как видите, мы не только подписали служебную записку, но и защитили ее от других пользователей. Никто, кроме пользователей, выбранных в качестве получателей, не смогут ее прочитать. Пакет, содержащий зашифрованную служебную записку, будет помещен в каталог с исходным файлом, имя пакета будет такое же, как у шифруемого файла (в нашем случае — записка01), а расширение — csp. Этот файл (с расширением .csp) нужно передать получателям, например, отправить по электронной почте или передать еще каким-либо способом. Посмотрим, как получатель сможет открыть его, расшифровать имеющиеся в пакете файлы и проверит вашу подпись. Получатель должен запустить программу CyberSafe, перейти в раздел Эл. цифровая подпись, Проверить подпись, нажать кнопку Доб. файлы и выбрать пакет (файл с расширением .csp). В поле выше можно выбрать папку, в которую будут помещены расшифрованные файлы (рис. 13).
Рис. 13. Выбор пакета .csp Затем нужно нажать кнопку Далее и выбрать сертификат для расшифровки. Поскольку пакет был адресован вашему коллеге, то он должен выбрать свой сертификат (рис. 14). После нажатия кнопки Далее программа попросит ввести пароль сертификата. Если пароль правильный, программа расшифрует файлы и сообщит, что расшифровка прошла успешно (рис. 15).
Рис. 14. Выбор сертификата
Рис. 15. Файлы расшифрованы успешно Также нужно проверить подпись, чтобы убедиться, что никто не подменил пакет во время его передачи. Для этого нажмите кнопку Проверить подпись. Поскольку при проверке подписи программа обращается к центру сертификатов, для проверки подписи нужен доступ к Интернету. Результат проверки подписи показан на рис. 16 — подпись проверена, сертификат доверенный и не находится в списке отозванных, а пакет не был модифицирован после подписания.
Рис. 16. Все хорошо Теперь посмотрим, как программа отреагирует на нестандартную ситуацию. Представим, что кто-то модифицировал пакет записка01.csp. Программа сообщит об ошибке и откажется расшифровывать файлы (рис. 17).
Рис. 17. Ошибка Если метод грубой силы не пройдет, то злоумышленник, пробравшись за компьютер вашего коллеги в обеденное время, может пойти иным путем. Он может удалить сертификат, выданный для e-mail вашего коллеги (gaifylin@gmail.com), и создать его заново для этого же e-mail и попытаться расшифровать служебную записку. Логика его проста — использовать сертификат вашего коллеги он не может, поскольку не знает его пароль, но он может удалить его и создать сертификат для этого же e-mail. Однако у него ничего не получится, поскольку он может создать хоть сотню сертификатов для одного e-mail — доверенным будет считаться тот, который был первым опубликован на сервере ключей CyberSafe. Он создает сертификат, вводит от него пароль, указанный при его создании, но, увы — прочитать служебную записку у него не получится (рис. 18).
Рис. 18. Ошибка расшифровки файла! Возможно, файл зашифрован другим ключом. Итак, мы только что зашифровали и подписали служебную записку и на собственном опыте убедились в том, что программа действительно работает и защищает ваши данные от их несанкционированного чтения и изменения. Выводы Из всего написанного ранее можно сделать вывод, что ЭП — очень полезное нововведение на предприятии, поскольку предприятия при использовании ЭП получат следующие преимущества: Возможность защиты документов от несанкционированного чтения и изменения Сокращение бумажного документооборота благодаря переводу части внутренних документов в электронный вид Возможность определять юридический статус документа по ЭП (устанавливать авторство документа). Вся описанная выше система сгодится только для коммерческих организаций, но ее нельзя использовать для государственных предприятий, где нужен сертифицированный криптопровайдер. Также описанную систему можно использовать между разными организациями для любых документов, если стороны договорились считать ключи и УЦ доверенными. Стоит отметить, что настоящая версия CyberSafe не является полноценной корпоративной версией, поскольку на данный момент пока нет централизованной выдачи и распределения ключей. Поэтому в этой версии администратор шифрования может сам формировать ключи и сертификаты и записывать пользователям на токены (будут рассмотрены во второй части статьи). Полноценная корпоративная версия ожидается к середине 2015 года. На этом заканчивается первая часть статьи. Во второй части мы поговорим как раз об использовании электронной подписи в государственных организациях и банках. Речь пойдет об использовании сертифицированного криптопровайдера и токенов. В принципе, все, о чем пойдет речь во второй части статьи, можно будет использовать и на коммерческих предприятиях, если есть на то необходимость.