Как зашифровать базу 1с
Безопасное хранение паролей
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. При разработке подсистем, взаимодействующих с различными внешними ресурсами (электронной почтой, веб-сервисами, FTP-ресурсами и т.п.) возникает необходимость запрашивать и передавать данные аутентификации к этим ресурсам: логин и пароль.
2. Для сведения к минимуму возможности перехвата пароля злоумышленниками не следует хранить пароли и другую конфиденциальную информацию в информационной базе. При этом минимальный уровень защищенности – в файловых информационных базах, в которых файл базы может быть скопирован целиком любым пользователем информационной базы. В клиент-серверной информационной базе доступ к базе данных, как правило, имеется только у администраторов СУБД.
Таким образом, следует запрашивать логин и пароль у пользователя и передавать их сразу, не сохраняя в информационной базе.
3. В ряде случаев такая схема работы доставляет объективные неудобства или принципиально невозможна:
- интерактивный запрос логина и пароля на каждую операцию может создавать значительный дискомфорт от работы, а временного сохранения на стороне клиента недостаточно;
- взаимодействие с различными внешними ресурсами должно выполняться на сервере, не зависимо от интенсивности работы пользователей с программой.
В таких случаях допустимо организовать хранение паролей и другой конфиденциальной информации в информационной базе, предупредив пользователей о последствиях. Следует помнить, что подобное хранение паролей не решает всех проблем безопасности, а лишь усложняет задачу для злоумышленника.
3.1. При этом не следует хранить пароли и другую конфиденциальную информацию в реквизитах тех же объектов метаданных, с которыми ведется повседневная работа. Для хранения такой информации следует использовать отдельный объект метаданных (например, регистр сведений), организовав к нему безопасный доступ на уровне системы прав доступа 1С:Предприятия.
3.2. При использовании Библиотеки стандартных подсистем (БСП) следует использовать безопасное хранилище паролей, которое решает ряд задач:
- Имея доступ к объекту метаданных, пользователь может прочитать содержимое реквизита с паролем, что невозможно при использовании безопасного хранилища. Для исключения случаев несанкционированного доступа к безопасному хранилищу получение и запись данных (паролей) возможна только в привилегированном режиме.
- Данные в безопасном хранилище хранятся в закрытом виде и тем самым исключаются случаи непредумышленной «засветки» паролей.
- Безопасное хранилище исключено из планов обмена, что предотвращает утечку паролей из информационной базы при обмене данными.
Для работы с безопасным хранилищем паролей предназначены процедуры и функции общего модуля ОбщегоНазначения : ЗаписатьДанныеВБезопасноеХранилище , ПрочитатьДанныеИзБезопасногоХранилища и УдалитьДанныеИзБезопасногоХранилища . Подробнее см. комментарии к этим функциям в БСП и раздел «3.4. Базовая функциональность - Использование при разработке конфигурации - Безопасное хранилище паролей» документации БСП.
3.3. Не следует хранить пароли в реквизитах формы, их следует извлекать только на стороне сервера и непосредственно перед их использованием. В противном случае, при открытии формы с маскированным вводом (или просмотром) пароля, пароль передается с сервера на клиент в открытом виде, что делает возможным его перехват. Установка привилегированного режима производится непосредственно перед вызовом функций, а не внутри них, что бы исключить получение или запись любых паролей в сеансе с любыми правами. Безопасность вызова должен обеспечивать вызывающий код, который обращается к конкретным паролям.
Для маскировки пароля на форме в обработчике событии формы ПриСозданииНаСервере необходимо разместить следующий код:
УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "Пароль, ПарольSMTP"); // Пароль, ПарольSMTP – ключи соответствия данных в безопасном хранилище
УстановитьПривилегированныйРежим(Ложь);
Пароль = ?(ЗначениеЗаполнено(Пароли.Пароль), ЭтотОбъект.УникальныйИдентификатор, "");
ПарольSMTP = ?(ЗначениеЗаполнено(Пароли.ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, "");
В обработчике события формы ПриЗаписиНаСервере :
Если ПарольИзменен Тогда
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль);
УстановитьПривилегированныйРежим(Ложь);
Пароль = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, "");
КонецЕсли;
Если ПарольSMTPИзменен Тогда
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольSMTP, "ПарольSMTP");
УстановитьПривилегированныйРежим(Ложь);
ПарольSMTP = ?(ЗначениеЗаполнено(ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, "");
КонецЕсли;
где Пароль и ПарольSMTP - реквизиты формы. Если пароль ранее был сохранен в программе, то следует присвоить соответствующему реквизиту уникальный идентификатор формы, эмулирующий наличие пароля. При записи объекта в форме, если был введен новый пароль, то записываем его в объект, а реквизит формы вновь затираем уникальным идентификатором.
Приложенные pdf-файлы с лабораторными работами представляют собой описание последовательности действий (с заданием, программным кодом и скриншотами).
Лабораторная работа №1. Шифрование и расшифровка строковых полей справочников модифицированным методом Виженера.Описание работы
В лабораторной работе рассмотрен пример реализации шифрования и расшифровки произвольных текстовых полей справочников с помощью метода Виженера (материалы работы базируются на публикации «Шифрование и расшифровка строковых полей справочников методом Виженера (с улучшениями)»).
Порядок работы
1. Должен быть реализован функционал шифрования и расшифровки по паролю, заданному пользователем.
2. Зашифрованные данные должны храниться в полях исходных данных, т.е. длина зашифрованного текста должна быть равной длине исходного текста, дополнительных таблиц быть не должно.
3. Список полей для шифрования и расшифровки должен быть настраиваемым и не зависеть от конфигурации 1С.
4. Шифрование должно выполняться средствами платформы 1С без внешних компонент, com-объектов и т.д. (для исключения зависимости от операционной системы).
Описание работы
Использование метода Вижинера без контроля используемого пароля может при расшифровке испортить данные. Цель данной работы научиться работать с контрольной (хеш) суммой. В лабораторной работе рассмотрен пример реализации шифрования и расшифровки произвольных текстовых полей справочников с проверкой зашифрованных данных с помощью контрольной (хеш) суммы (исходные материалы доступны по ссылке 1 и ссылке 2).
Порядок работы
1. Должен быть реализован функционал шифрования и расшифровки по паролю, заданному пользователем.
2. Зашифрованные данные должны храниться в полях исходных данных, т.е. длина зашифрованного текста должна быть равной длине исходного текста, дополнительных таблиц быть не должно.
3. Список полей для шифрования и расшифровки должен быть настраиваемым и не зависеть от конфигурации 1С.
4. Шифрование должно выполняться средствами платформы 1С без внешних компонент, com-объектов и т.д. (для исключения зависимости от операционной системы).
5. При шифровании должна вычисляться контрольная хеш-сумма на основании пользовательского пароля одним из четырех алгоритмов (на выбор пользователя). Данная хеш-сумма должна сохраняться в хранилище общих настроек конфигурации.
6. При расшифровке указанный пользователем паролем должен проверяться на равенство с ранее сохранённой хеш-суммой и, в случае несовпадения, не позволять пользователю расшифровать данные (чтобы не испортить их).
Часть кода лабораторной работы №2 базируется на 1-й лабораторной работе, но есть и отличия:
Лабораторная работа №3. Метод симметричного шифрования.Описание работы
Цель данной работы научиться использовать метод симметричного шифрования, который расшифрует только при правильном пароле. В лабораторной работе рассмотрен пример реализации шифрования и расшифровки произвольных текстовых полей справочника (материалы работы базируются на публикации «Симметричное шифрование в 1С»).
Порядок работы
1. Должен быть реализован функционал шифрования и расшифровки по паролю, заданному пользователем.
2. Зашифрованные данные должны храниться в реквизитах соответствующих элементах справочника.
3. Шифрование должно выполняться исключительно средствами платформы 1С.
Ниже приведен программный код, реализованный в данной лабораторной работе:
Лабораторная работа №4. Использование хеш-суммы для контроля изменения значений справочника.Описание работы
Часто в работе пользователей с данными возникает ситуация, когда пользователь хочет быть уверен, что его данные не изменялись другими пользователями. При этом данных бывает очень много и пользователь не может быстро вручную проверить все данные на предмет отсутствия внесения в них несанкционированных изменений (материалы работы базируются на публикации "Хеширование данных с ключом по алгоритму SHA-1 штатными средствами 1С").
Ниже приведен программный код, реализованный в данной лабораторной работе:
К публикации приложена база 1С, в которой реализованы все четыре лабораторные работы. Конфигурация должна работать на любой платформе более-менее современной платформе «1С:Предприятие 8» (режим совместимости специально установил как «Версия 8.3.10»). Разработка и тестирование осуществлялись на базе учебной платформы «1С:Предприятие 8.3, учебная версия» (8.3.16.1224).
Проще уволить недобросовестных сотрудников :) Кто помешает ему ручкой на бумагу все с экрана перенести?
Таких приблут масса. Как программных, так и аппаратных. Тормоза только от них неимоверные.
(0) для защиты от копирования настраивай аудит к файлам средствами windows. А на счет шифрования, так это чревато серьезным снижением производительности. "для защиты от копирования настраивай аудит к файлам средствами windows".Посзволяют ли средства WIN2003SRV и родной сервер терминалов настроить доступ к каталогу базы 1с так, что бы пользователь мог работать с данными только через 1с, ни проводником ни другими прогами доступа к каталогу у него быть не должно? Если да, где почитать? (8)Позволяют, почитать можешь в любой книжке по администрированию.
Хотя по идее даже если у него и будет доступ к проводнику, куда он скопирует данные в терминале? Всех в терминалы. 1С-ку в сиквел. Кроме 1С больше ничего не давать. Сетевые шары убрать. Результат по защите будет обуспечен на 80-90%. И мониторить попытки утянуть данные (отлавливать хитро>|<опых).
Хотя если будет желание - с рабочей станции принтскринами утянут
"Таких приблут масса. Как программных, так и аппаратных. Тормоза только от них неимоверные."
"Всех в терминалы. 1С-ку в сиквел. Кроме 1С больше ничего не давать"
Терминал очень хороший и удобный инструмент для работы не только 1 с, к тому же у меня есть пользователи на тонких клиентах.
Походу без скуля не обойтись.
(10)А причем тут скуль? Нет разницы для безопасности, скуль или дбф, если в терминале. (12) резервные-то копии делаешь?насчет того чтоб файлы не уперли - см. (5) для сетевого доступа + настроить права доступа на каталог с базой (на папку поставить запрет на обзор файлов средствами винды) 1С-ка при этоб будет работать, а ни одного файла не видно будет, также терминал + тоже можно базу скрыть. все свои штучки по шифрованию лучше забудь, если не хочешь однажды остаться без базы.
rs_trade (7)
". А на счет шифрования, так это чревато серьезным снижением производительности. "
БРЕХНЯ. причем большая.
P.S. Файловый БЭСТ с включенным шифрованием практически не тормозит - проверено на собственном опыте.
ildus (17)
"все свои штучки по шифрованию лучше забудь, если не хочешь однажды остаться без базы."
Кто о чем, а вшивый о бане, криворукий о кувалде. Практически никогда не служило потерей базы
(17)Для того чтобы остаться без базы, достаточно не делать бэкапы, шифрование никак не способствует потере базы.А вообще.
Потери в скорости конечно есть, но небольшие, в пределах 20%, если запас по мощности железа есть, то не проблема.
Проблема в другом - как шифрование помешает утащить базу? Шифрование хорошо применять если боишься что к серверу с базой получат доступ посторонние, тобишь украдут сервак, или маски шоу нагрянут. А утечку базы через пользователей можно решить только административными мерами, тобишь запрет на копирование, и отсутствие возможности скопировать файл.
Базу в терминал, на рабочих местах отсутствие портов под флешки и пишущих дисководов, а так же интернета, эл. почта только корпоративная.
"Шифрование хорошо применять если боишься что к серверу с базой получат доступ посторонние, тобишь украдут сервак, или маски шоу нагряну"
Пользуюсь шифрованием всего диска с базами и документами.
"Для того чтобы остаться без базы, достаточно не делать бэкапы, шифрование никак не способствует потере базы"
Пользуюсь акрониксом (еженочно данные заливаются на закрытую паролем область диска). системный диск еженочно тудаже.
(19, 20) довольно часто на форуме появляются вопросы типа "помогите восстановить файлы с шифрованного диска и т.п., я это имел ввиду. Судя по сабжу и учитывая ник автора :) с шифрованием лучше ему не связываться. Насчет резервных копий - их ведь тоже нужно защищать чтоб не уперли, если они есть, конечно :) (21) >> (еженочно данные заливаются на закрытую паролем область диска).а вот представь, что тебя не станет к примеру, или еще че нить, пароль кроме тебя никто не знает, и че там и как у тебя в скрытые шифрованные разделы пишется, спрятанные неизвестно где и вдруг упал сервер. В какие убытки это выльется для фирмы, если никто кроме тебя не знает откуда и как можно вытащить зашифрованные неизвестно чем и как данные. (19) >> Кто о чем.
Сканер - то свой из другого города расшарил, али нет? :))
(19) какого рода шифрование там? на каких объемах проверялось?
шифрование ВСЕГДА включает тормоза. конечно я подразумеваю более-менее вменяемые алгоиртмы типа rijndael (двукратная потеря производительности по иопсам вполне может быть и это нормально), если мы говорим о асимметричном алгоритме. то коэффициент потерь мне сложно предположить, он будет довольно значительным.
возможно имеют смысл специальные аппаратные контроллеры с такой функцией, с отдельным довольно мощным процессором и кэшем. не видел такого в реале - не знаю, как оно сработает. все остальные софтовые прибамбасы все равно будут включать тормоза, да и кривовато такие проги поддерживают raid-массивы (т.е. штатно не поддерживают или же ограниченно поддерживают, однако работают. на страх и риск использующего)
из вменяемого и доступного выбрал бы truecrypt или drivecrypt, особо как бы и не из чего выбирать :(
Наверно, многие из разработчиков когда-нибудь сталкивались с необходимостью зашифровать данные в 1С. Однажды и я столкнулся с этой проблемой. В сети предлагается множество способов организации шифрования сторонними методами, я же хотел бы рассмотреть шифрование встроенными методами.
В данной статье рассматривается шифрование строк. Разбираемые алгоритмы применимы к любым значениям, которые возможно преобразовать в строку и обратно. Например, таблицу значений можно преобразовать в строку методом ЗначениеВСтрокуВнутр и методом ЗначениеИзСтрокиВнутр получить обратно таблицу значений.
В 1С есть два встроенных варианта использования шифрования:
1. Использование электронной подписи (асимметричное шифрование) имеет сложный механизм применения - в настоящей статье не рассматривается.
2. Использование запароленного zip-архива (симметричное шифрование) - рассматривается в настоящей статье.
Для анализа использования алгоритма приведу примеры универсальных функций, выполняющих шифрование и дешифровку данных (функции выполняются на сервере):
Функция ПолучитьЗашифрованныеДанные возвращает хранилище значения с зашифрованными двоичными данными.
ДанныеШифрования - Строка для зашифровки;
КлючШифрования - Ключ симметричного шифрования (пароль zip-архива);
ИдентификаторДанных - Строка - Произвольное идентификационное значение (необязательный параметр)
Механизм шифрования заключается в следующей последовательности действий:
- Шифруемая строка записывается в текстовый файл
- Текстовый файл помещается в архив с паролем (метод шифрования можно выбрать, в данном случае используется AES-256)
- Записанный архив в зашифрованном виде переводится в двоичные данные
- Двоичные данные помещаются в хранилище значения, которое возвращается функцией (в дальнейшем, хранилище значения можно поместить в реквизит какого-либо объекта или регистра и хранить в СУБД до появления необходимости в расшифровке)
- Созданные файлы удаляются
Функция ПолучитьРасшифрованныеДанные возвращает расшифрованное строковое значение.
ХранилищеДанных -Хранилище значения с зашифрованными данными (значение возвращенное функцией ПолучитьЗашифрованныеДанные);
КлючШифрования - Ключ сииметричного шифрования (пароль zip-архива; такой же, как для функции ПолучитьЗашифрованныеДанные);
ИдентификаторДанных - Строка - Произвольное идентификационное значение (необязательный параметр)
Механизм дешифрования заключается в следующей последовательности действий:
Читайте также: