Підпис файлу ключем

Доброго дня
Зіштовхнувся з задачею, що потрібно на сайті реалізувати підпис файлом — ключем (КЕП) іншого файлу
Гуглив гуглив, знайшов ІІТ який платний, і декілька рішень для роботи на java, c++ та на nodejs, але це все server-side рішення
А мені потрібно підписувати файл в самому браузері, щоб не передавати приват кей на сервер
Тому питання: чи є якесь рішення для браузеру готове?
Якщо ні, то підкажіть як реалізувати server-side рішення, щоб не порушувати закони (бо наскіке розумію, зберігати приват ключі юзерів без їх хгоди не можна та і в цілому це потребує більше сек’юрності) і якщо все ж таки рішення передавати краще — то підкажіть як це робити правильно, бо не можна ж просто так передавати файлю ключа ?
Буду радий любій інфі

👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Використовував ось цю штуку, попередньо прогнавши через browserify а потім трохи допилював для використання в браузері. В нього там є й інші варіанти, і для браузера також, але я не знаю чи воно працює.
github.com/dstucrypt/agent

iit.com.ua/downloads
iit.com.ua/...​oductfiles/EUSignWebD.doc
В основі вся та же EUSignCP.dll
Колись грався з некерованим кодом на C#, точніше розколупував бібліотеку, і писав обгортку до неї. По коду можна зрозуміти формат передачі даних функціям бібліотеки.
github.com/GorulkoAV/EUSignDFS

Доречі питання.
Хто останнім часом пробував підписати PDF-файл ключем/паролем?
Бо у мене щось ніфіга не логіниться і пише помилки HTTPS.
Наразі працює через дію, там там цілий танець: відбиток, QR, пін, посміхніться, ще QR, ще пін, покліпайте очима — і тоді підписується.

Приват просить ставити крипто-плагін в браузер. chrome.google.com/...​afjemgcecklpgnebaebonghka
Можливо, вебассемблі допоможе обійти це обмеження.

Доречі, в приват24 бізнес мене просить цей плагін, але підписувати можу і без нього

Подивився екстеншен, в цілому цікаво, може буде легше всього допрацювати цей варіант для сайту
Дякую!

Не знаю готові рішення, але через вебасм може можна jvm запустити, або node vm

Треба дивитися як в інших солюшенах реалізовано, типу docusign

дивився вчасно
Судячи по запитам, там витягуєтсья публічний ключ та посилається на сервер
і ще якісь запити до привату

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

для сервера кроме ноды есть бесплатные решения для php и .net
и кто сказал то нельзя переджавать файл ключа — у меня учетная система с ППРО все ключи передаются на сервер и там хранятся
передеются по https естественно

и кто сказал то нельзя переджавать файл ключа

Закон України про електронні довірчі послуги
В деталях:

2. Користувачі електронних довірчих послуг зобов’язані:

забезпечувати конфіденційність та неможливість доступу інших осіб до особистого ключа;

невідкладно повідомляти надавача електронних довірчих послуг про підозру або факт компрометації особистого ключа;

так не давайте доступ сторонним
зашифруйте его или полоэите в закрытое хранилище

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

сторонним

Це у тому числі і твій бек
Але взагалі рішення є — Сертифіковані залізяки від IIT. На скільки знаю це єдине рішення, до якого не можуть прикопатись. Гряда для рядових користувачів, у банках ж більш круті із захистом від несанкційного доступу до заліза (це означає що прилад просто вибухає якщо що)

решение от ITT это просто наложение ЭЦП
налоговой пофиг как и чем ее наложили
собственно по подписи и определить нельзя чем наложено

Те, що не можуть виявити не означає що ти нічого не порушуєш. Я юридичною інформацією не володію детально, але коли ми інтегрували Гряду юристи казали що можуть призначити аудит IT інфраструктури і відкликати усі сертифікати. А у банку ліцензію запросто за це забрати можуть.

решение от ITT это просто наложение ЭЦП

Ні, і генерація і зберігання. У нас така хрінь була:
iit.com.ua/...​&p=3&gtype=1&type=1&id=99

ну юристам лищь бвбло срубить
сомневаюсь что кто то станет копатся в том как вы там хранриете ключи

есть две продемы

Наложегние ЭЦП
проблема чисто техническя какую библиотеку на какой платформе заюзать законы тут вообще ни при чем

хранение ключей
это больше организационная проблема сделайте защищенное хранилище, поставте пользователя в известность что он передает ключи , не сохраняйте пароль пользователя и так далее
в конце концов ключ и с браузера можно увести

прямое нарушение если сами кому то передадите ключ
а если у вас дырявый сервер то пользак перевыпустит ключ и пойдкет к более пряморуким разрабам

или варинт как у меня — опенсорс рещенние — хотите пользуетесь хотите нет
денег занег не буру и ничего никому не должен
код открытый — ревьювте у кого сомнения

як на мене основна проблема, це ваші граматичні помилки

browseryfy

Це ж здається просто рекурсивний збирач залежностей. Воно нічого не вдіє якщо там використано API яке браузер не підтримує.

для подлписи не нужны никакие серверные api — там чистый яваскрипт
я сам это когда то собирал для браузера но где то забросил проект

Я не зміг знайти яким чином отримати privKey в браузері з того ж jks

в цілому його то можна передавати, але це потребує додаткових зусиль (по сек’юрності)
В моєму випадку це все зайві проблеми і хочется просто зробити рішення для браузеру, щоб юзер міг в браузері підписати файл (файл з серверу просто заносити в змінну в js (нема різниці звідки файл прийшов(сервеїклієнт))

Колись рив цю тему у напрямку електронних РРО (хотів собі зробити РРО для свого офлайн бізнесу). Там із тим підписом у нас власний стандарт для Елептичних кривих. Коротше краще реально не заморочуватись і взяти якесь готове рішення від ІІТ або у Привату ще є якась імплементація якщо не хочеш нажити неймовірну кількість гемору.
Ну якщо хочеш гемору github.com/shamray/dstu4145 ось, можна якось збілдити у wasm і юзати

мене цікавить не рішення для дсту4145, а браузерна версії для підпису
Вдруг хтось знаходив\працював за таким
А писати настільке низько не дуже хотілося б (та і воно не потрібно, там вже точно гемора буде достатньо)

Прикрутити готове платне рішення і більше не заморочуватись, інакше хльбните горя по самі...

якщо нічого не знайду нормально, то . напевно, так і буду робити)

на nodejs

Я би придивився до ось цього. Що там такого що вимагає саме ноди? Може просто робота з файловою системою у спосіб який не підтримується браузером чи щось подібне?
Такий фунціонал реалізований taxer-ом тому рішення існує.

в браузері головна проблема в модулі кріпто, немає апі для роботи з jks (ну ящко я правильно розумію)
А в ноді це є

Ну ключ з привату в форматі jks, задача потребую зчитування таких форматів
dat (key-6.dat), zs2, sk,jsk,pk8,pfx
як я розумію, в цожному випадку потрібно отримати приват кей і ним підписати док

Через Дію інтегруйся😂

Там же пропонується тіке фрейм — віджет, де юзер віб’є свій ключ та файл який потрібно підписати?

Той фрейм — віджет платний (id.gov.ua/connect), але може підписувати не тільки файли, а і будь які дані (дані передаються в фрейм з сайта через виклик java script). Там є підтримка всіх форматів ключів і є інтеграція з Дія.Підпис. З відкритого є форк бібліотеки Криптоніт від приватбанку github.com/specinfo-ua/UAPKI

Краще не передавати на сервер.
Готові рішення я не знаю. Але підозріваю що гугляться легко. Можливо треба окремо зчитати файл в память бровзера і окремо підписати. Тобто шукай як зробити ці дві окремі завдання

ну ось я шукав готове рішення на js, але не знайшов нічого
Подумав що я не так шукаю, здається як головний стандарт підписання документів в нашій країні, а немає якихось прям нормальних простих рішен «із коробки»

Підписатись на коментарі