Pull to refresh

Comments 84

Вам не нужен блокчейн тут. Поскольку администратор БД — централизованная сущность, достаточно подписи на каждый документ от сервиса аудита. Он же, заодно, и сохраняет операции.

Администратор БД, или человек, повысивший свои привилегии до уровня администратора БД могут внести в базу изменения, которые никто без блокчейна не найдет

А что мешает переписать всю историю, если есть админские права? Суть блокчейна-то, что у нас подписи разных агентов в базе и каждый участник независимо валидирует всю цепочку.


Что "все агенты" и кто "все", кто валидирует? Если одинокий 1С-сервер, то это всё карго-культ. Если же это распределённая база, то кто её участники? Пикалки на складе? Ну и обнаружила эта пикалка расхождение, что она делать будет?

Мешает запись последнего ключа на бумаге

Запись кем? И почему этот кто-то не может сделать новую бумажку после замены 100 айфонов по 1000 баксов на 1 айфон по 100000 баксов?

Вы правы в том, что в результате мы имеем дело с человеческим фактором. Но если человек захочет, то используя эту технологию, он сможет получить абсолютный контроль над данными. А без этой технологии не сможет, даже если очень захочет

А чем абсолютный контроль над данными отличается от просто контроля над данными? Вот если у меня есть подписанные моим ключом транзакции (без блокчейна), то чем они менее надёжны, чем подписанные друг другом транзакции без моей подписи?

Я убрал одну вашу транзакцию. Как вы это обнаружите?

… а как вы обнаружите, какая конкретно транзакция была удалена, если злоумышленник пересчитал все хэши от начала времен?

У меня есть последний ключ. С его помощью я обнаружу подмену журнала и восстановлю его.

Я спросил, как вы обнаружите, какая конкретно транзакция была удалена.


(Чтобы восстановить, вам нужны все стартовые данные, а они у вас не обязательно есть.)

Обнаружив подмену журнала, я восстановлю его из резервной копии.

Если у злоумышленника есть доступ к этой копии, то ничего не изменится. Если нет, то вообще ничего не нужно: просто всегда сверяйте с этой копией.

Если я не могу восстановить из одной копии, я восстановлю из другой, более ранней. Если злоумышленник уничтожил все копии и базу заодно, то так тому и быть. Но это не останется незамеченным. Предлагаю далее не обсуждать это направление. Давайте будем исходить из того, что злоумышленник стремится остаться незамеченным
Давайте будем исходить из того, что злоумышленник стремится остаться незамеченным

Подписи решают задачу предотвращения этого как минимум не хуже.

Я может быть чего-то не понимаю. Если не прав, поправьте. Но с ЭЦП вам придется как-то решать вопрос сохранности ключа. Т.е. ключ должен хранится на отдельном устройстве. И в идеале это устройство связывается с основной базой только через посредника-человека. Человек руками вбивает данные документа на защищенном устройстве. Получает подпись. Затем опять руками вбивает подпись в основной базе. Есть какие-то другие безопасные способы подписания документа?
Но с ЭЦП вам придется как-то решать вопрос сохранности ключа.

А в чем проблема? Существующие системы прекрасно это решают.


Есть какие-то другие безопасные способы подписания документа?

Ну да, как минимум подписание на устройстве со сверкой контрольной фразы.


Но если вы не доверяете не только работникам, то и ПО, сделать нельзя ничего.

Будет сверка контрольной фразы для каждого документа?

Если вы хотите проверять, что каждый документ — это именно то, что вы видите, то да, каждого документа.

А в блокчейне достаточно одной сверки на сеанс

Тогда и здесь достаточно одной сверки на сеанс.

А без этой технологии не сможет, даже если очень захочет

Это утверждение неверно. Есть сильно больше одного способа получить контроль над данными без этой технологии, причем эти способы — более удобные.

Например, как вам предложили выше, подписать каждую транзакцию. По сравнению с вашим вариантом выгод как минимум две — не надо ничего вручную переписывать, и явно видно, какая транзакция была изменена.


(Защита от удаления транзакций тоже тривиальная: подписывается не только транзакция, но и сведенное "итого" на момент сверки, содержащее, помимо прочего, число транзакций. Идентификатор предыдущей транзакции тоже можно держать, но у этого есть свои недостатки.)

Администратор БД, или человек, повысивший свои привилегии до уровня администратора БД могут внести в базу изменения

Могут. Но
1. Что за мотивация у них должна быть менять цифры в исторических бухгалтерских документах, чтобы совершить подобное уголовное преступление?
2. И если вдруг настолько сильная мотивация нашлась, то что им мешает сделать это вечерком, заодно пересчитав хеш во всех последующих операциях?
Вроде ведь описал в статье — что мешает. Запись последнего ключа на бумаге
Но если ключ записывается на бумагу раз в день, то что мешает поменять документ до того, как ключ перепишут на бумагу? Что мешает всунуть поддельный документ или поддельную корректирующую строчку в «пакет следующего дня»? Вы предлагаете метод вида «для усиления безопасности повесить замок на дырявую картонную коробку»
Куда всунуть? Если документа не будет в журнале, тогда он будет сверяться на следующий день наравне с другими новыми документами. А если вы его «всунете» в журнал после записи последнего ключа, тогда разойдутся ключи
Это когда от светофора хотят функции автоматических железнодорожных стрелок. Не берите на себя много.
. В свою очередь сам журнал защищен от подмены технологией блокчейн и записью последнего ключа в секретное место.

Тяжелое и неудобное решение практически несуществующей проблемы в бухгалтерском учёте. Вся первичка продублирована в бумажном виде, и в здравом уме в 1С её никто не подделывает. Вот ошибки при вводе, пересортица при отгрузке и т.п. — это причина 99.9% подобных проблем, и их никак блокчейн не решит.
Я заменил в приходном документе 110х101 на 101х110. Да, это расходится с бумажным документом, но как вы это обнаружите?
Хм. Да как всегда. Увижу, что в периоде возникло расхождение фактических остатков с расчётными, проведу сверку электронных документов с бумажными. Это на любом предприятии происходит регулярно без всяких «я заменил», просто банально по человеческому фактору, ещё в момент ввода документов в систему. И соответственно, процесс сверки — тоже обычное дело для любой бухгалтерии.
Возникшее расхождение человек унес домой. Собственно ради этого он все и задумал. Нет никакого расхождения. Подумайте
Унёс домой — это как? На складе нет средств обеспечения безопасности? Если нет, то всё прекрасно будет уноситься домой и без правки бухгалтерских документов, уж не сомневайтесь. Если есть, то никто такие крутые схемы воротить не будет, благо, люди, занимающиеся приёмкой/отгрузкой ТМЦ, и люди, имеющие возможность администрировать 1С — это две разные планеты.
Кроме того, расхождения выявляются не только по количеству. У вас есть и налоговые накладные, и платежи поставщикам, и одной правкой приходной накладной тут не обойтись. Так что вы реально придумали решение проблемы, которая находится совсем в другом месте.
Насчет платежей поставщикам я вроде бы написал, что 110х101=101*110
Вы вот правда думаете, что товароведы вообще-вообще не считают себестоимость, не знают, какая она должна быть, и могут подобное пропустить? Что бухгалтерия не делает регулярно актов сверки с контрагентами?
Акт сверки с контрагентом не поможет. Потому что 110х101=101х110. Поставщик свои 11 110 так и так получит. А что касается себестоимости, то это вопрос должной осмотрительности того, кто атакует ваш склад. В моем примере себестоимость в одной поставке меняется всего лишь на 9%. А сколько таких поставок в месяц? Какая будет дельта в результате? Вы думаете, что все еще большая? Ну хорошо, я могу придумать пример, где себестоимость изменится всего на 0.9% или на 0.09% В любом случае атакующий не ставит себе целью вынести сразу полсклада. Он будет выносить по чуть-чуть, чтобы никто не мог заметить
Ну то есть, для осуществления подобной атаки должны быть следующие условия:
1. Отношение стоимости единицы товара к стоимости партии должно быть крайне небольшим
2. Товароведы должны быть не слишком внимательными, не помнить остатков, не помнить себестоимости.
3. Злоумышленник должен иметь админский доступ к 1С, и владеть ей на уровне опытного разработчика, чтобы и документы подправить, и регистры.
4. Злоумышленник должен иметь доступ на склад
5. Должна быть возможность незаметно вынести товар со склада
6. Сверка с контрагентами если и будет проводиться, то только по суммам, не по количеству.
7. И при всём при этом мероприятие должно быть достаточно выгодным, чтобы рисковать.
Вы же, надеюсь, понимаете, что вероятность подобной атаки настолько ничтожна, что даже защита склада от падения метеорита — и то более прибыльное дело?
Не помню как в одноце но я а своей учетной системе просто веду лог кто когда и с какого компа менял статус документа. Например открывал на редактирование и перепроводил. На практике этого вполне достаточно.
В 1С это реализовано на уровне платформы (История данных), на прикладном уровне стандартизировано в БСП с 2010, разного качества велосипеды делались еще во времена 7.7
И кто мешает изменить записи в одних таблицах и не трогать при этом другие?
В контексте записи истории — она делается в одной транзакции с записью объекта. Т.е. не записать новую версию в историю без специальных средств нельзя.
Кто мешает делать запись не в транзакции?
Запись объекта всегда идет в транзакции. Вне транзакции записывать объекты в 1С нельзя. Если вы не открывали транзакцию самостоятельно, то ее откроет платформа. Обойти это в рамках платформы никак не получится.
А кто нас держит в рамках платформы? Есть база данных. В ней есть таблицы и записи. И все это придумано в том числе и для того, чтобы легко и непринужденно менять
Если бы вы заглядывали в базу данных 1С, знали бы, что «легко и непринуждённо» тут совершенно неподходящее определение :)
Разумеется я заглядывал. И не раз за последние 25 лет )))
Легко и непринужденно
В рамках платформы нас держит контекст обсуждения. Если мы переходим на уровень СУБД, то вариантов оставить аудиторский след становится еще больше.

Я смотрю у вас продвинутые кладовщики — не имея админских прав ни в своей ОС, ни в сети, ни в 1С, ни на кластере 1С, ни в СУБД могут прям со своего рабочего места через веб-публикацию базы сделать Update в СУБД. Респект!
Админский пароль к СУБД хранится на кластере. Собственно самого словосочетания «пароль хранится» уже достаточно
Админский пароль к СУБД хранится на кластере

… но зачем?

Не понял. Поясните, пожалуйста

Зачем у вас "на кластере" хранится админский пароль к СУБД?

Затем, что 1С так реализовала трехзвенную архитектуру. Платформа для коннекта не запрашивает пароль у пользователя, а использует сохраненный

А, ну то есть это конкретная болячка 1С, не имеющая ничего общего с принципиальными проблемами учетных систем.

В любой учетной системе количество людей, которые могут делать в ней все, что хотят, строго больше 0.
Я не понимаю вашу позицию. Вы считаете, что проблемы нет вообще? Или что проблема есть, но она имеет лучшие решения?
В любой учетной системе количество людей, которые могут делать в ней все, что хотят, строго больше 0.

Совершенно не обязательно. Зачем?


Вы считаете, что проблемы нет вообще?

Какой конкретно проблемы?

Как необязательно? Если кто-то знает админский пароль к СУБД, то он может делать в системе все, что хочет. Разве не так?
Если кто-то знает админский пароль к СУБД, то он может делать в системе все, что хочет.

Если кто-то знает админский пароль к СУБД, он может делать с СУБД все, что хочет (но даже это не обязательно будет бесследно). Но, как я уже писал, нормальной системе совершенно не нужен админский пароль к СУБД для функционирования.


Почему вы смешиваете "пользователя, обладающего правами администратора в учетной системе" и "администратора СУБД"? У меня в соседнем окне открыта Asana, которая система учета задач в проекте. У меня в рамках моего набора проектов админские права, я могу делать что угодно (но на самом деле — нет, audit trails я подчищать не могу). Есть ли у меня админские права на СУБД? Нет. Есть ли у меня какие-то права на СУБД? Нет. Могу ли я их получить? Напрямую — точно нет, понадобится взлом, и он далеко не тривиален.

Системе для функционирования может быть и не нужен, но кто-то же его знает. И с этим фактом вы ничего не поделаете

Ну да, с этим фактом ничего нельзя поделать. А зачем? Какую конкретно проблему вы решаете?

Проблему соответствия данных учетной системы реальности

А почему "соответствие данных учетной системы реальности" — это проблема, и как это связано с тем, что у кого-то есть админские права на СУБД?

Платформа для коннекта не запрашивает пароль у пользователя, а использует сохраненный

Ээээ. Вы в курсе, да, что нормальной трехзвенной системе вообще не нужен пароль пользователя для работы с БД? И уж точно не нужно, чтобы у пользователя были администраторские права в БД?

С чего вдруг пароль админский-то? 1С-никогда не требовались админские права ни на СУБД, ни в ОС. То что ленивым админам влом нормально настроить права по документации тоже 1С виновата?

Для MS SQL Server вообще можно сделать так, чтобы и пароль не нужно было хранить (смотрите Managed Service Account).
UFO just landed and posted this here
История документа — это не какое то чудо, а всего лишь запись в таблице. Она может быть, а может и не быть.
UFO just landed and posted this here
Отчет делается каждый день?
UFO just landed and posted this here
Но не чаше, чем раз в день?
И не без оснований надеется, что ни сверка с контрагентом (110х101=101х110), ни инвентаризация ничего не выявят.

Если эти 110 (101) штук получались от контрагента с единственной целью выкрасить и выбросить тут же списать, то не выявит, так и выявлять нечего: списаны, раворованы — один черт. Во всех же остальных 99,9(9)% случаев недостача вскроется уже на следующем этапе. И в данном случае задача сводится не к бухгалтерии, а к организации процесса: за любую матценность в любой момент времени кто-то конкретный непременно несет ответственность. Или не несет, но тогда и с идеальной бухгалтерией контора движется в пропасть.

Что же касается темы статьи, то 1С существует уже не первый десяток лет, но есть бухгалтер (а сколько Вам нужно?), а есть биоприставка к клавиатуре машинистка от бухгалтерии, вбивающая малопонятные ей цифры в бухгалтерскую программу, которая — вах, шайтан! — каким-то чудесным образом выдает предполагаемо правильнй ответ. Так вот, бухгалтерам за свою занятость опасаться не стоит, а индустриализация, промышленная революция, роботизация, компьюютеризация и это все всегда приводили к повышению производительности труда за счет замены неквалифицированной рабсилы механизмами, чего тут нового-то?

Ну несет кто-то ответственность. И что? Как вы обнаружите, что тот, кто несет ответственность вынес 9 штук?

Вы просто никогда не работали бухгалтером. Рассуждения дилетанта. Подход из вашей статьи возможен, но он ничего не улучшает и не решает озвученных вами проблем. Бессмысленная суета перед провалом.

Довольно однобокое представление о современном учёте, видимо, связанное с российской спецификой названий. Он уже давно вышел за пределы функции финансового контроля. А бухгалтер давно перестал быть человеком, просто несущим ответственность за циферки в системе.

Вы буквально дальше первого предложения не продвинулись? ОК, объясняю еще раз, совсем по-простому: завод закупил 110 деталей по 101 рублю. Некто ушлый подделал первичку и вышло, что якобы закупили 101 деталь по 110 рублей. Общая сумма сходится, сверка проходит, бухгалтерия не в курсах, все чики-пуки. Якобы. Что на самом деле дальше с этими деталями происходит? Их собирают в некую продукцию, с другими деталями, и внезапно выясняется, что всех остальных деталей закуплено 110 штук, и только этих — 101. Поднимается первичка и обнаруживается и странная цена, и странное количество, и подчистки, и тот, кто ответственен как за первичку, так и за матценности на тот момент, когда с ними произошли чудесные количественно-ценовые метаморфозы.
Деталь А поставляется в коробках по 11 штук, деталь Б в коробках по 17 штук. В процессе приемки на склад часть деталей возвращаются поставщику, как бракованные. Деталь А или деталь Б могут запороть при сборке и тогда ее спишут в отходы, а со склада запросят дополнительную деталь. В реальности почти ни у кого нет такого, что количество деталей совпадает. В любом случае не стоит надеяться на то, что кладовщик — дурак. И будет брать те детали, которые легко обнаружить
товарищу Калимулину одной Мизды для бреда уже мало, решил расширить аудиторию на Хабр…
Спасибо всем, кто принял участие в обсуждении. Главный результат заключается в том, что предложенная мной схема с блокчейном — работает. Никто не увидел какой-либо явной «дыры». И это — хорошо. Все озвученные претензии можно свести к двум. Первая — с ЭЦП можно сделать все то же самое, но проще. Вторая претензия заключается в том, что я решаю выдуманную мною же проблему. Отвечу по порядку.
Перефразируя поэта, можно сказать, что «дело прочно, когда под ним струится пот». Строгое соответствие между данными учетной системы и реальностью не возникает само собой. Оно всегда есть результат некоего человеческого усилия. При работе с большими объемами данных, мы решаем задачу поиска минимально необходимых усилий для контроля. Чуть больше усилий, и они могут стать неподъемными из-за большого объема данных. Чуть меньше усилий, и контроль потерян. Наша задача — нащупать эту границу. И я утверждаю, что предложенная мной схема с блокчейном, как раз и находит эту границу. 2 минуты человеческих усилий на сеанс контроля — это, по видимому, абсолютный минимум. А что с ЭЦП? Там же можно просто нажать на красивую кнопочку «Подписать» и это будет еще быстрее? Будет. Но это будет уже по другую сторону границы. Там, где контроль уже утерян. У вас есть каналы связи между базой данных и вашим компьютером и между вашим компьютером и защищенным устройством в обе стороны. Просто нажав кнопочку «Подписать» вы полагаетесь на то, что на подпись будет отправлено именно то, что в базе, а также на то, что подпись, которая в результате уйдет в базу — это именно та подпись, что выдало вам защищенное устройство. Может быть и существует схема с ЭЦП, которая дает человеку возможность контролировать эти каналы. Поправьте меня, кто лучше знает. Но пока у меня большое подозрение, что реально надежная схема с ЭЦП потребует от человека не меньше, а больше усилий, чем схема с блокчейном. Чем еще хороша моя схема, так это тем, что канал там один — ручка, бумажка. Контроль над этим каналом со стороны человека абсолютно надежен. И это очевидно даже неспециалисту.
Что касается второй претензии. Каждый раз, когда вы говорите, что проблема надуманна, где-то хлопает в ладоши от радости человек, который проделал операцию 101х110=110х101. Подумайте, быть может это в вас говорит снобизм? Как так?! Меня, такого умного, объегорит какой-то кладовщик?! Ха-ха! Вот только все меняется очень быстро. Мы уже живем в мире, где все знают все (или, по крайней мере, движемся к этому с огромной скоростью). Что такое базы данных и как с ними обращаться уже сейчас доступно каждому со школьного возраста. Особо заинтересованные и мотивированные могут нагуглить известные дыры в популярных системах и способы повышения привилегий. Хороший пример здесь 1С. То, что пароль к базе данных хранится особо не скрывается. Но и дырка по тем или иным причинам тоже не закрывается уже чуть ли не третий десяток лет. Сколько в России и около учетных систем на базе 1С? Ну и, наконец, не стоит забывать, что в любой учетной системе количество людей, которые могут делать в ней все, что хотят всегда строго больше нуля. Традиционный способ решить проблему «человеческого фактора» в такой ситуации — это дублирование и взаимный контроль. Т.е. кто-то должен контролировать человека, который может все. И это — реальная проблема
Контроль над этим каналом со стороны человека абсолютно надежен.

Вы только забываете, что нет никакого контроля со стороны человека за расчетом ваших хэшей. Так что вся ваша надежность упирается все равно упирается в доверие ПО.


Ну и, наконец, не стоит забывать, что в любой учетной системе количество людей, которые могут делать в ней все, что хотят всегда строго больше нуля.

Это утверждение ложно. Вы забываете про аудит-трейлы.


Понимаете, проблема вашего подхода в том, что он отвечает только на один вопрос: было ли что-то изменено. Что было изменено, когда, кем — вы все равно не узнаете. А человеческий фактор в переписывании цифр на бумажку делает возможным еще и ложные срабатывания — когда человек ошибся в одной цифре, и теперь невозможно выяснить, кто же прав, его бумажка или система.

Вы совершенно правы в том, что в конечном счете все упирается в доверие к ПО. А вернее в то, как нам заменить ДОверие на ПОСЛЕверие. Предложенная мной технология стягивает эту проблему в одну точку. Нам надо перед каждым сеансом сверки проверять наше ПО. И я свожу это ПО к абсолютному минимуму, который может быть быстро загружен и быстро проверен. В особо ответственных случаях, визуально. Пример в статье содержит 20 строк кода. Даже если мы добавим туда SHA256, мы все равно не выйдем за пределы 100 строк.

К чему вы вспомнили про аудит-трейлы? Если человек может делать в базе все, что хочет, значит он может вносить изменения мимо аудит-трейлов.

Ответ на вопрос: «что было изменено» можно будет найти в бэкапах. В автоматическом режиме, по ссылке на документ. Я продолжаю настаивать на том, что вопрос «было ли что-то изменено» — ключевой. Решив его, вы решите и все остальное. Не решив, не решите ничего.

Ложные срабатывания — это вообще не проблема. При ложном срабатывании пользователь откатится к предыдущему состоянию журнала и просто еще раз сверит документы прошлого сеанса. И то, это будет происходить только в том случае, когда проверяющий один. В большинстве случаев проверяющих будет не менее двух. И только если сам собственник решит не доверять никому этот процесс и будет заниматься сверкой самостоятельно, тогда возможны редкие ложные срабатывания с некритичными последствиями. Не вижу здесь проблемы
Даже если мы добавим туда SHA256, мы все равно не выйдем за пределы 100 строк.

Нет, выйдем. Рассчет хэша по сложному документу — это много кода, который надо весь проверять. А иначе можно случайно выяснить, что у вас в хэш не входит сумма.


Если человек может делать в базе все, что хочет, значит он может вносить изменения мимо аудит-трейлов.

Это совершенно не обязательно.


Ответ на вопрос: «что было изменено» можно будет найти в бэкапах.

… и в бэкапах будут те же данные, которые в измененной БД, потому что у вас есть человек, который может делать с БД все, в том числе и править бэкапы.


Решив его, вы решите и все остальное.

Нет, вы не решите остальное, в этом и проблема.


При ложном срабатывании пользователь откатится к предыдущему состоянию журнала

А где он его возьмет?


В большинстве случаев проверяющих будет не менее двух.

А зачем? Мы не доверяем никому, кроме себя.

Да, блокчейн работать будет в данном случае. :)
Но, если честно — реально это всё нафиг не нужно. Можно реализовать не менее надежную систему и без блокчейна. Например, комбинация логов на удаленных серверах (куда есть доступ только у контролеров) + ЭЦП сработает даже лучше — можно довольно легко найти, какой конкретно документ и как был изменен. Или многие другие методы. И опять же — это обычно не делают, так как не очень надо.

Ценность в данном решении одна — повесить лапшу на уши доверчивому инвестору / владельцу, и попилить бабло на модном слове «блокчейн».
Какие это «другие методы»? Вы не могли бы озвучить?
Sign up to leave a comment.

Articles