Цифровий паспорт товару не показує всім одне й те саме. Покупець бачить загальнодоступні дані. Ремонтна майстерня або підприємство з переробки бачить більше. Орган ринкового нагляду бачить усе. Це вже з’ясовано, і європейські стандарти тепер чітко це закріплюють.
Цікаве питання звучить дещо тихіше: якщо хтось отримує доступ до захищених полів, що виходять за межі загальнодоступних даних, чи може він підтвердити, що саме ці поля є справжніми? Чи мусить він покладатися на те, що платформа правильно їх відібрала та передала без змін?
Уявіть собі нотаріуса, який засвідчує не лист у цілому, а кожен абзац окремо. Публічний лист отримує кожен. Той, хто має право на більше, отримує додаткові абзаци, і кожен із них, як і раніше, має печатку того самого нотаріуса. Саме так ми побудували нашу платформу. Для більшості платформ чесна відповідь на поставлене вище запитання звучить так: «довіра». У нас вона звучить так: «доказ» - для кожного поля, яке додається лише під час оприлюднення. Ця стаття пояснює, чому ця відмінність має значення і чому ми обрали для цього більш складний шлях.
Всі однаково дотримуються правил доступу
EN 18239, європейський стандарт щодо прав доступу, безпеки та конфіденційності в DPP, вимагає, щоб доступ контролювався для кожного поля окремо: для кожного поля існує правило, хто має право його переглядати. Це правильна вимога, і її неважко виконати. Який статус мають ці стандарти, ми детально роз’яснили у нашій статті про гармонізовані стандарти.
Звичайний спосіб реалізації - це фільтр на сервері. Сервер знає, хто надсилає запит, перевіряє, що ця особа має право бачити, і повертає саме цей фрагмент. Більше норма не вимагає. Читач повинен вірити, що сервер чесно відібрав інформацію і нічого не змінив під час передачі. Для публічного інформаційного листка це цілком прийнятно. Але для значення, на якому переробник базує ціну вживаної батареї, це занадто велика довіра.
Є одна проблема, яку стандарт не враховує: фрагмент надходить без печатки.
Очевидним рішенням є підписання даних. Для обох кінців шкали добре працює звичайний підпис: підписати публічний вигляд, підписати повний набір даних. Як це відбувається детально, описано в розділі «Підписи та сертифікати» у DPP. У середині система дає збій. Підпис на всьому документі охоплює саме ті поля, які були присутні під час підписання. Якщо авторизованому читачеві додатково відкрити захищене поле, це поле опиняється поза межами підписаного набору і надходить до нього без захисту. Ніхто не підписує заздалегідь усі можливі комбінації «хто що бачить», оскільки кількість таких комбінацій зростає в геометричній прогресії. Доводиться повертатися до фільтра без печатки, і середній рівень знову базується на довірі.
Підписувати кожне поле окремо
Існує краща конструкція, і саме на ній ми будуємо платформу. Замість того, щоб підписувати готовий документ як єдиний блок, виробник за один прохід окремо визначає кожне поле (для тих, хто знається на стандартах: процедура W3C ecdsa-sd-2023).
Кожен вигляд починається з тих самих відкритих полів. Те, що читач бачить понад це, додається поле за полем, і кожне з цих полів продовжує вести до відкритого ключа виробника - в автономному режимі, без повторного підписання та без довіри до організації, яка сформувала цей вигляд. Поля, на які немає права, просто відсутні. Не замазані, а взагалі відсутні, і про них нічого не просочується.
Один цикл: ремонтна майстерня
Ремонтна майстерня заявила про законний інтерес щодо акумулятора - один із рівнів доступу, який прямо передбачений Регламентом про акумулятори. Система майстерні автосервісу авторизується за допомогою свого ключа на нашому інтерфейсі та отримує паспорт. Відповіддю є той самий відкритий паспорт, який бачить і покупниця, але з одним додатковим полем: інструкція з демонтажу, яка розкривається лише уповноваженим користувачам. Ніякого другого документа, ніякої спеціальної версії.
Перш ніж підприємство покладається на це поле, його програмне забезпечення перевіряє надану печатку за допомогою публічного ключа виробника. Якщо перевірка проходить успішно, у тому числі й щодо додаткового поля, підприємство розуміє: ця інструкція походить безпосередньо від виробника, і ніхто на шляху її передачі нічого в ній не змінив. Якщо перевірка не проходить, він відкидає весь документ. Те, що він отримує саме ті поля, на які має право, залишається завданням нашої системи контролю доступу. Новим є наступний крок: чи справжнє те, що надходить, він перевіряє самостійно, не звертаючись до нас.
Чому «непошкоджена»печатка## - це суть справи
Ціла печатка не означає, що вміст є правдивим. Воно означає: саме це написав виробник, і з того часу ніхто не змінив у ньому жодного символу. Таким чином, із питання довіри виключаються всі, хто лише передавав документ далі: проміжний накопичувач, мережа, архів, ми.
Хто вам дав паспорт, більше не має значення.
А печатка є бінарною. Вона або зберігається, або ні - напівпошкодженої печатки не буває. Тому немає поступової різниці в тому, чи надійдуть до вас додаткові поля з печаткою, чи без неї: без печатки вони не є дещо менш заповненими - вони взагалі не заповнені.
Обидва способи перегляду
Кожен може перевірити це самостійно. Transpareo Time Machine - це наш відкритий додаток для перегляду паспортів продуктів: він переглядає історію версій паспорта й при цьому перевіряє кожну підпис у браузері користувача, не звертаючись до нашого сервера. Паспорт футболки містить підпис, що охоплює весь документ, а паспорт батареї - затвердження по полях.
Обидва є відкритими стандартами W3C, і їх може реалізувати кожен. Підпис, що охоплює весь документ, значно дешевше створити та підтримувати, і тим, хто надає лише публічні дані, цього цілком достатньо. Те, що Time Machine підтримує обидва методи, є навмисним: паспорт залишається звичайним стандартним форматом, який може перевірити будь-який відповідний інструмент, а не лише наш.
Кому це вигідно і чого вимагає стандарт
Кому взагалі розкривається інформація ## ,крім публічних даних? Не випадковій покупниці. Це - переробник, який оцінює вартість використаного акумуляторного блоку; страховик, який визначає вартість ризику; рециклер, який сортує хімічні речовини; державний орган, який розслідує справу. Читачі, від рішень яких залежать гроші або безпека. І за звичайного підходу саме ті читачі, які не отримують печатки для полів, на яких ґрунтується їхнє рішення. Ми вважаємо, що печатка перевірки має означати одне й те саме для всіх: кожне показане поле походить від виробника і з того часу не змінювалося. Печатка, яка ставиться лише на публічні поля, - це напівпечатка.
Ми говоримо відверто: нічого з цього не є обов’язковим. Стандарт EN 18239 вимагає, щоб доступ контролювався, і фільтр на сервері бездоганно це забезпечує. Ми робимо відкриті поля перевіреними на додачу, оскільки весь сенс підписаного паспорта полягає в тому, що ніхто не повинен довіряти платформі. Виключення середнього рівня як винятку повертає саме ту довіру, яку підпис мав би усунути.
Цей самий принцип дозволяє «забути» про поле
Визначення кожного поля окремо має ще одну властивість, і саме її вимагає європейське законодавство. Загальний регламент про захист даних надає людям право на видалення персональних даних. Набір даних, підписаний як єдиний блок, не може виконати цю вимогу без знищення власного підпису.
Оскільки тут кожне поле є самостійним, окреме поле можна видалити, а решта даних продовжує перевірятися. Якщо персональні дані випадково потрапляють до паспорта, їх можна повністю видалити, і паспорт залишається дійсним: не потрібно видавати новий, історія не переривається. Поля, які закон вимагає зберігати, залишаються на місці; те, що можна видалити, можна видалити на запит, навіть через роки.
Чому це складно і як ми це вирішили
Ми не винайшли цю процедуру - це загальнодоступний стандарт W3C. Складно не ## те, щоб придумати ідею. Складно те, щоб реалізувати її так, щоб паспорт і через десять років все ще проходив перевірку. Звичайний підпис обчислюється на основі байтів документа. Підпис за полями обчислюється на основі окремих даних, і для цього перед підписанням паспорт перетворюється на фіксований формат, у якому кожна інформація представлена окремим реченням. Цей формат повинен через десять років відтворитися символ за символом, інакше печатка більше не підійде. На заваді стоять три непримітні речі, і ми усунули всі три в самому корені.
Числа втрачають свій тип. Таке значення, як 2,0, після проходження через звичайний формат даних повертається як 2. Для людини це те саме, а для фіксованого формату - інше речення. У нас кожне значення зберігається разом зі своїм типом, і публікація припиняється, щойно з’являється хоча б одне число без типу.
Назви ще не означають змісту. Кожна назва поля має відповідати однозначному значенню у словнику, інакше поле непомітно зникає під час перетворення, і печатка його не покриває. У нас кожен словник зберігається локально і ніколи не завантажується через мережу; невідоме ім’я поля зупиняє підписання, замість того щоб непомітно повернути порожній результат.
Записи потребують фіксованих імен. Кожен запис у документі має у нас фіксований ідентифікатор, щоб формат залишався однаковим під час кожного прогону, замість того щоб щоразу присвоювати нові допоміжні імена.
Найскладніша частина полягає у власному ключі виробника. Для кожного випуску потрібен додатковий короткочасний ключ, за допомогою якого окремо підписуються поля, що підлягають оприлюдненню. Цей ключ створює та знищує сам виробник. Якби він був у нас, ми могли б згодом вигадати окремі поля. Кожен паспорт має дві такі печатки: одну від виробника та одну від Transpareo, навіть для окремого поля, що підлягає оприлюдненню.
На наш погляд, ці зусилля є виправданими. Кожен паспорт підписується під час оприлюднення та прив’язується до попередньої версії, а незмінний десятирічний архів починає діяти, щойно паспорти зареєстровані в реєстрі EU-DPP. Підписання кожного поля замість цілого блоку є розширенням цієї основної концепції, а не додатковим елементом.
На якому етапі ми перебуваємо
Ми вирішили надати доказ для кожного читача, оскільки печатка має означати одне й те саме незалежно від того, хто на неї дивиться. Хто хоче побачити, як це працює: обидва зразки паспортів, посилання на які наведено вище, перевіряються безпосередньо в браузері, без звернення до сервера.
Питання щодо цього допису
Чи передбачає якийсь стандарт підпис по кожному полю?
Ні. Європейський стандарт EN 18239 щодо прав доступу в DPP вимагає, щоб доступ контролювався для кожного поля окремо, і фільтр на сервері повністю це забезпечує. Надання можливості перевірки оприлюднених полів - це наше рішення, а не формальність, яку вимагає будь-яке регулювання. Ми вважаємо ці зусилля виправданими, оскільки весь сенс підписаного паспорта полягає в тому, що ніхто не повинен довіряти платформі. Про те, який статус мають ці стандарти, йдеться в нашій статті про гармонізовані стандарти.
Ми публікуємо лише загальнодоступні дані. Чи потрібно це нам?
Ймовірно, ні, і ми це відкрито заявляємо. Підпис, що охоплює весь документ, покриває паспорт, усі поля якого є загальнодоступними, і його значно дешевше створити та підтримувати. Підпис по полях стає доцільним, щойно з’являється друга цільова аудиторія, наприклад, мережа сервісних центрів, підприємство з переробки відходів або державний орган, яким ви в іншому випадку надавали б витяги без печатки. Обидва методи є відкритими стандартами W3C (ecdsa-sd-2023 для підпису по полях), кожен інструмент, що підтримує цей стандарт, може їх перевірити, і обидва сьогодні працюють у Transpareo Time Machine - на «паспорті» футболки та на «паспорті» батареї.
Чи можна згодом видалити персональні дані, не анулюючи паспорт?
Так, і це дійсно передбачено європейським законодавством. Загальний регламент про захист даних надає людям право вимагати видалення персональних даних, а набір даних, підписаний як блок, не може виконати цю вимогу, не знищивши при цьому власний підпис. Оскільки тут кожне поле зафіксовано окремо, можна видалити окреме поле, а решта даних продовжуватиме перевірятися без необхідності переоформлення та без порушення історії версій. Поля, які закон вимагає зберігати, залишаються на місці.
Хто зберігає ключ підпису?
Кожен паспорт має дві печатки, і одна з них може бути вашою. Для кожного випуску додатково потрібен короткочасний ключ, який окремо підписує поля, що підлягають розкриттю; його генерує та знищує сам виробник, адже якби він перебував у нас, ми могли б згодом вигадати окремі поля. Ми перевіряємо отриману печатку за допомогою збереженого відкритого ключа, перш ніж довіряти їй. Таким чином, кожен паспорт має дві печатки від двох незалежних органів - як для окремого поля, що підлягає розкриттю, так і для всього набору даних.
Чи буде паспорт дійсним через десять років?
Саме в цьому і полягає складність. Польова сигнатура обчислюється на основі окремих даних документа, а не його байтів, тому через десятиліття цей самий фіксований формат має відтворитися символ за символом. Три фактори порушують цю стабільність, і ми усунули всі три в корені. Кожне значення зберігається разом із його типом, кожен словник знаходиться у нас і ніколи не завантажується через мережу, а кожен запис має фіксований ідентифікатор. Незмінний десятирічний архів створено і почне діяти, щойно паспорти будуть зареєстровані в реєстрі ЄС. Детальніше про це - у нашому аналізі Регламенту про реєстр.




