Разкриване, без да се загуби подписът

Разкриване, без да се загуби подписът

Всеки, който чете продуктовия паспорт, получава едни и същи публични данни, а някои получават и защитени полета в допълнение. Въпросът, който си задаваме, е дали тези допълнителни полета са подкрепени с доказателства. Ние подписваме всяко поле поотделно, така че дори едно публикувано поле да може да бъде проверено спрямо публичен ключ - офлайн, без да се налага да се обръщат към нас.

Цифровият паспорт на продукта не показва едно и също на всички. Купувачката вижда публично достъпните данни. Сервизът или фирмата за рециклиране вижда повече. Органът за надзор на пазара вижда всичко. Това е ясно, а европейските стандарти вече го постановяват изрично.

Интересният въпрос е по-дискретен: ако на някого бъдат разкрити защитени полета, които надхвърлят обхвата на публичните данни, може ли той да докаже, че именно тези полета са автентични? Или трябва да се довери, че платформата ги е подбрала правилно и ги е предала без промени?

При повечето платформи честният отговор е: доверие. Ние сме изградили нашата така, че отговорът да е „доказателство“ - не само за публичните полета, но и за всяко поле, което се добавя едва при разкриването. Защо тази разлика има значение и защо сме избрали по-трудоемкия път за това.

Всички спазват правилото за достъп по един и същ начин

EN 18239, европейският стандарт за права на достъп, сигурност и поверителност в DPP, изисква контрол на достъпа за всеки елемент от данните: за всяко поле има правило, което определя кой има право да го вижда. Това е правилното изискване и не е трудно да се изпълни. Какъв статут имат изобщо тези стандарти, сме разяснили в хармонизирани стандарти.

Обичайният начин за постигането ѝ е филтрирането от страна на сървъра. Сървърът знае кой отправя заявката, проверява какво има право да вижда това лице и връща точно този фрагмент. Контрол на достъпа: изпълнено. Нормата не изисква нищо повече.

Има обаче един улов, за който нормата не се грижи: Фрагментът пристига неподписан. Читателят получава изглед, съставен специално за него, и трябва да вярва, че сървърът е избрал съдържанието честно и не е променил нищо по пътя. За публичен информационен бюлетин това е приемливо. За стойност, на която преработвателят основава цената на употребявана батерия, това изисква много доверие.

Където единственият подпис достига границите си

Очевидното решение е данните да бъдат подписани. За двата края на скалата обикновеният подпис работи добре: подписване на публичния изглед, подписване на пълния набор от данни и проверка и на двете срещу публичен ключ, без да има сървър между тях. Как точно става това, е описано в Подписи и сертификати в DPP.

Проблемът възниква в средата. Подписът върху целия документ обхваща точно един набор от полета, а именно онези, които са били налице по време на подписването. Ако на оторизиран читател се разкрие допълнително защитено поле, това поле остава извън подписания набор и пристига при него непокрито. Ако вместо това от самото начало се подпише пълният набор от данни, подписът обхваща всичко, но тогава би трябвало да се покаже всичко на всеки.

Следователно междинните нива остават извън обхвата: сервизът, застрахователят, фирмата за рециклиране. Ако искаме да подпишем предварително всяка възможна комбинация от „кой вижда какво“, ще ни е необходим отделен подписан документ за всяка комбинация, а броят на комбинациите нараства експоненциално с всяка следваща група с достъп. Никой не прави това. Връщаме се към неподписания сървър филтър, а междинното ниво отново се основава на доверие.

Подписване на всяко поле поотделно

Има по-добра конструкция и върху нея изграждаме платформата. Вместо да подписва готовия документ като един блок, издателят определя всяко поле поотделно в рамките на един-единствен цикъл на подписване (за запознатите със стандартите: сертификатът на W3C ecdsa-sd-2023 за селективно разкриване).

Всеки изглед започва от публичния ядро

Всеки изглед започва с едни и същи публични полета. Това, което читателят вижда отвъд тях, се добавя поле по поле, и всяко от тези полета продължава да води до публичния ключ на издателя - офлайн, без повторно подписване и без доверие в институцията, която е съставила изгледа. Полетата, за които няма право на достъп, просто липсват. Не са зачеркнати, а изобщо ги няма, и нищо за тях не прозира.

Защо „непрекъснатостта“ е същината на въпроса

Представете си нотариус, който не заверява писмото като цяло, а всеки параграф поотделно. Всеки получава публичното писмо. Който има право на повече, получава допълнителните абзаци, като всеки от тях продължава да носи печата на същия нотариус. При обичайната процедура платформата преписва тези абзаци за вас, а това, което стига до вас, носи само нейната дума.

Защо „ненарушен“ е от решаващо значение, заслужава още едно изречение. Ненарушен печат не означава, че съдържанието е вярно. Той казва: точно това е написал издателят и оттогава никой не е променил нито една буква в него. По този начин всеки, който просто е препратил документа - междинното хранилище, мрежата, архивът, ние - отпада от въпроса за доверието. Няма значение кой ви е дал паспорта.

А печатът е двоичен. Той е цял или не е, няма такова нещо като наполовина счупен. Ако се счупи, няма да разберете коя фраза е била променена, а само че вече не можете да се доверите на целия лист. Ето защо няма постепенна разлика дали допълнителните полета пристигат при вас със сигнатурата си или без нея: без сигнатура те не са по-слабо запълнени, а изобщо не са запълнени.

Двата метода за преглед

Всеки може да провери това сам. Transpareo Time Machine е нашето приложение с отворен код за преглед на продуктови паспорти: то прелиства историята на версиите на даден паспорт и при това изчислява всеки подпис в браузъра на потребителя, без да се обръща към наш сървър. В нея публично се показват два примера за паспорти. Паспортът на една тениска съдържа подпис върху целия документ, а паспортът на една батерия - разкриване на данните поле по поле.

И двете са отворени спецификации на W3C: eddsa-jcs-2022 за подписа върху целия документ, ecdsa-sd-2023 за разкриването по полета. Всеки, който желае, може да ги приложи. Усилията, които това изисква, са причината, поради която мнозина няма да го направят: подписът върху целия документ е значително по-евтин за създаване и поддържане, а за тези, които предоставят само публични данни, това е напълно достатъчно.

Фактът, че Time Machine владее и двата метода, е умишлен и ще остане такъв. Тя не принадлежи на никоя платформа. Проверяващ, който приема само по-скъпия метод, би бил инструмент за нас и за никой друг.

На кого се разкриват защитените полета

Струва си да се запитаме на кого изобщо се разкрива нещо освен публичните данни. Не на случайната купувачка - тя получава публичния паспорт. Това са преработвателят, който оценява стойността на употребяван акумулаторен пакет, застрахователят, който определя цената на риска, рециклиращият оператор, който сортира химикалите, и органите, които разследват даден случай. Това са читателите, чиито решения зависят от пари или сигурност.

И именно тези полета остават непокрити при обичайния подход. Този, който има най-голяма причина да иска криптографско удостоверение, не го получава именно за полетата, които са в основата на неговото решение.

Смятаме, че сертификатът трябва да има едно и също значение за всички. „Проверено от Transpareo“ означава едно и също както в разширения изглед на сервиза, така и в публичния паспорт на купувачката: всяка показана област произхожда от издателя и оттогава не е била променяна. Печат, който важи само за публичните полета, е половин печат.

Повече, отколкото изисква стандартът

Казваме го открито: нищо от това не е задължително. EN 18239 изисква достъпът да бъде контролиран, а филтърът от страна на сървъра контролира достъпа безупречно. Да направим така, че и публично достъпните полета да могат да бъдат проверени криптографски, е нещо, което правим в допълнение, а не задължително изискване, което нормата ни налага.

Именно затова си заслужава да бъде отбелязано. Би било лесно да спазим буквата на стандарта, да предоставим сървърния филтър и да обявим нивото за изпълнено. Ние предпочитаме обещанието да важи навсякъде, където се появява печатът. Защото целия смисъл на подписания паспорт е, че никой не трябва да се доверява на платформата. Изключването на средното ниво като изключение възстановява точно онова доверие, което подписът трябваше да премахне.

Същият принцип позволява едно поле да бъде пренебрегнато

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

Тъй като тук всяко поле е самостоятелно, едно отделно поле може да бъде премахнато, докато останалата част продължава да бъде валидна. Ако по невнимание лични данни попаднат в паспорт, те се премахват напълно, а паспортът остава валиден: няма нужда от преиздаване, няма прекъсване на историята. Полетата, които законът изисква да се съхраняват, остават; това, което може да бъде изтрито, може да бъде изтрито при поискване, дори години по-късно.

Въпреки това това е съвсем обикновен паспорт

Нищо от това не превръща паспорта в специален обект, който може да бъде отворен само от нашите инструменти. Той остава „Verifiable Credential“ в JSON-LD - форматът, към който се ориентира светът на уеб стандартите, и същият формат, който използват Протоколът за прозрачност на ООН и останалата част от средата на W3C.

Паспортът, който купувачката сканира в браузъра си, е същият обект, който партньорът в данните може да прочете, и всеки проверяващ, който спазва стандартите, може да го провери, не само нашите. Допълнителната сигурност не струва нищо на читателя и не обвързва никого с нас.

Защо това е технически трудно

Преди всичко, за да не възникне погрешно впечатление: ние не сме измислили този метод. ecdsa-sd-2023 е публична спецификация на W3C, криптографията зад нея не е наша, и всеки, който иска да я приложи, може да прочете за нея. Трудното не е да се измисли идеята. Трудното е да се изгради така, че паспортът да може да се проверява и след десет години. Именно в това се състои работата и за това може да се каже нещо полезно.

Разликата звучи малка, но променя основата: обикновеният подпис изчислява въз основа на байтовете на документа. Селективното разкриване изчислява въз основа на съдържащите се в него твърдения. Преди подписването паспортът се преобразува в стандартизирана форма, в която всяка информация се представя като отделно, самостоятелно изречение. Едва тогава е възможно да се пропусне едно изречение, без да се повредят останалите.

По този начин се наследява проблем, който байтовият подпис няма: същата стандартизирана форма трябва да се възстанови точно след десет години. Не приблизително, а символ по символ, в противен случай доказателството вече няма да е валидно. Три неща пречат на това и всичките три са незабележими.

Числата губят типа си. Ако се запише число като обикновен JSON, по пътя се губи информация за това какво число е било. Стойност като 2.0 се връща като 2 след преминаване през JSON. За човека това е едно и също, но за стандартизираната форма е друго изречение и проверката се проваля.

Наименованията все още не са значение. За да се получи стандартизираната форма, всяко име на поле трябва да се преобразува в еднозначно значение. Ако липсва такова, полето изчезва безшумно при преобразуването. Тогава то фигурира в паспорта, но удостоверението не го обхваща и никой не го забелязва.

Значенията обикновено се намират в мрежата. Това съответствие е записано в речник, който повечето инструменти изтеглят от мрежата по време на проверката. Който постъпи така, прави проверяемостта на своя паспорт зависима от това дали чужд адрес ще отговаря и след десет години, и то без промени.

Как решихме проблема

Затворихме трите точки в корена, вместо да ги улавяме по-късно.

Типове. Всяка стойност се записва с нейния тип, а публикуването се прекъсва, веднага щом в стандартизираната форма се появи дори и само едно число без тип. По този начин грешката се открива там, където струва един ред, вместо години по-късно като необяснимо нарушение при проверката.

Речници. Всеки речник, към който се позовава даден паспорт, се намира локално при нас и никога не се изтегля от мрежата. Неизвестен адрес води до категорично прекъсване при подписването, а не до тихо връщане към празен резултат.

Идентификатори. Всеки възел в документа носи стабилен идентификатор, за да остане стандартизираната форма възпроизводима, вместо при всяко изпълнение да се присвояват нови помощни имена.

Най-деликатната част се крие в „Bring Your Own Key“. За всяко издаване е необходим допълнителен, краткотраен ключ, с който отделните полета, подлежащи на разкриване, се подписват поотделно. Този ключ се генерира и изтрива от самия издател. Ако ключът се намираше при нас, бихме могли да измислим отделни полета впоследствие, а независимостта на подписа на издателя би била само декларативна. Проверяваме върнатото удостоверение спрямо съхранения публичен ключ, преди да му се доверим.

Всеки паспорт съдържа два такива доказателства - едно от издателя и едно от Transpareo - и всяко от тях се извлича независимо за преглед от читателя. Два подписа, две независими една от друга авторитети, дори и за едно-единствено разкрито поле.

За нас този разход на усилия е на правилното място. Не сме добавили възможността за проверка впоследствие; платформата е създадена около нея още от първата версия. Всеки паспорт се подписва при публикуването и се верига към предходната версия. Непроменимото десетгодишно архивно хранилище е създадено и влиза в сила, веднага щом паспортите бъдат регистрирани в регистъра на EU-DPP. Подписването на всяко поле, вместо на целия блок, е разширение на тази основна концепция, а не надстройка върху нещо, което никога не е било замислено за това.

Къде се намираме

Ако го опростим, изборът е лесен. Можете да разкриете защитените полета и да помолите читателя да се довери на вашия филтър - това отговаря на стандарта. Или можете да ги разкриете и да предоставите доказателството веднага - това отговаря на по-високите изисквания, които според нас тези полета заслужават.

Ние избрахме доказателството - за всеки читател, защото един печат трябва да означава едно и също нещо, независимо кой го разглежда. За тези, които искат да видят как работи: двете демонстрации, към които има линкове по-горе, се проверяват директно в браузъра, офлайн, само срещу публичен ключ.

Актуализации относно нивата на достъп и удостоверенията

Селективно разкриване на информация, подписи и развитието на стандартите на DPP - ежемесечно в кратък формат във вашата пощенска кутия.