Право на GDPR да бъде забравен срещу Datomic

Нека да започна с бързи дреболии: Познавате ли този човек?

Ако отговорът е „да“, има големи шансове да сте запознати с този цитат:

С голяма сила идва голяма отговорност
- Чичо Бен

Забележка: Наясно съм, че произходът на този цитат вероятно достига до Волтер, но ей, той не е толкова закачлив като Спайдърмен!

Ако четете това, предполагам, че вече сте запознати с Datomic и сте влюбени във функцията за пътуване във времето. Просто е толкова мощен! Но, както беше посочено по-горе, тази мощност идва на цена. Например - прави спазването на GDPR малко сложно.

Да, знам, но друг път четете за GDPR. Всички вече сме го имали, без почивка за нечестивите. Но нека си припомним някои точки от задълженията, които ни полага на гърба:

  • Защитете PII (лична информация)
  • Изтрийте трайно PII, ако техният собственик поиска от нас (право да бъде забравен)
  • Одитирайте достъпа до PII

Разбира се, има повече разпоредби. Те обаче препълват обхвата на този блог, така че ще ги оставя извън това.

Конфликт на интереси

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

Ето, нека ви покажа, използвайки бърз пример:

В понеделник Джон Доу влиза в нашия уебсайт и се регистрира:

@ (Г / Transact
   Кон
   [{: потребител / id 111
     : потребител / име "John Doe"
     : потребител / телефон "123456789"}])
=>
{: db-преди datomic.db.Db,
 @ 5193c0be: db-after,
 datomic.db.Db @ 43e943fe,
 : tx-data [#datom [13194139534313 50 #inst "2018-06-06T13: 07: 58.664-00: 00" 13194139534313 вярно]
           #datom [17592186045418 63 111 13194139534313 вярно]
           #datom [17592186045418 64 "John Doe" 13194139534313 вярно]
           #datom [17592186045418 65 "123456789" 13194139534313 вярно]],
 : tempids {-9223301668109598066 17592186045418}}

Нека да отбележим транзакцията, която натисна новия потребител към нашата база данни:

  • Идентификационният номер на тази транзакция е 13194139534313
  • Тази транзакция се случи на #inst ”2018–06–06T13: 07: 58.664–00: 00”

Той играе с приложението от няколко дни. Въпреки че в петък решава, че не е доволен от услугата, затова ни моли да изтрием данните му. И така се съобразяваме:

@ (Г / Transact
   Кон
   [[: db.fn / retractEntity [: user / id 111]]])
=>
{: db-преди datomic.db.Db,
 @ 43e943fe: db-after,
 datomic.db.Db @ 37505082,
 : tx-data [#datom [13194139534315 50 #inst "2018-06-06T13: 15: 23.436-00: 00" 13194139534315 вярно]
           #datom [17592186045418 63 111 13194139534315 невярно]
           #datom [17592186045418 64 "John Doe" 13194139534315 невярно]
           #datom [17592186045418 65 "123456789" 13194139534315 невярно]],
 : tempids {}}

Просто правим последна проверка, за да сме сигурни, че всичко е наред:

(->
  (d / db conn)
  (г / субект [: потребител / идентификатор 111]))
=> нула

Супер! Джон Доу го няма - можем да се върнем към бизнеса, нали? Е, не. Спомняте ли си бележките, които направихме за транзакцията, която създаде акаунта на Джон Доу? Нека го използваме за пътуване назад във времето:

(->
  (d / db conn)
  (г / от 13194139534313)
  (г / субект [: потребител / идентификатор 111]))
=> #: db {: id 17592186045418}

Но ей, ние имаме гърба ти! Ние го измислихме и ще се радваме да го споделим с вас.

Ако Платон беше прав ...

Представете си, че Атлантида наистина е съществувала. Представете си също, че имаха огромен обелиск точно в центъра на главния им площад. И че този обелиск беше гравирал вашия собствен телефонен номер и любимото си измръзване от Дънкин Понички. Как GDPR-несъвместим е това? Отговорът е - напълно е добре. Градът изчезна на тънък въздух (или вода) и по този начин тайното ви желание за поничка с бисквитки чудовище все още е безопасно между вас и мен (мръсни!)

Просто ги заключете

Добре, но шеги настрана. Алгоритъмът за нашия проблем е мъртъв прост. За целта ще използваме криптовалута.

  1. Създайте ключ, който ще използвате за криптиране на PII. Трябва да съхраните този ключ по начин, който ще ви позволи надеждно да го изтриете, когато е необходимо.
  2. Използвайте ключа за криптиране на данните по време на влизане и декриптиране при излизане.
  3. Когато дойде време, изхвърлете ключа.
Червеният блок, който виждате по-горе, изобразява структурата, когато използвате Hashicorp Vault. Разбира се, може да варира в зависимост от инструмента, който ще изберете.

И така, как да изхвърлите ключ в края на краищата?

Сега тук имате много възможности да избирате. Както винаги, няма решение с един размер за всички, но позволете ми да ви дам няколко идеи:

  • : db / акциз - да, просто бихте могли да принудите Datomic да забрави напълно този конкретен ключ за крипта. Но ако искате вашите данни да бъдат криптирани правилно, не можете да запазите ключа на същото място, където съхранявате PII.
  • Отделна база данни с възможности за изтриване - само две колони: потребителски идентификатор и криптовалута. Просто като това. Но това поставя много усилия на гърба ви - трябва да поддържате тази БД, да следите нейното здраве и все още остава задължение за одит на достъпите.
  • Hashicorp Vault - това е много мощен инструмент, който идеално отговаря на нашия проблем. Той има дълбоко конфигурируеми политики за достъп, одит, разделяне на тайни, режим на висока наличност и т.н. Въпреки това, за да се въртят всички тези предавки, е необходимо много конфигурация и ресурси. Официалният урок за режим на висока наличност, използващ AWS, споменава 8 случая! Така че, ако мащабът на вашия проблем оправдава инвестицията на усилията в Vault - продължете!
  • AWS решения - сега има поне три продукта, които биха могли да бъдат използвани в този проблем - Служба за управление на ключове, Мениджър на тайни и Магазин на параметри на System Manager

Решихме да отидем в магазина на параметрите за ценообразуването му (трудно е да се победи безплатно). Има някои критики към него поради ограниченията на заявките, така че рано или късно ще трябва да мигрираме за нещо по-ефективно. Ето защо може би е добре да го поставите зад граница. Това би трябвало да помогне за миграцията с относителна лекота.

Но какво, ако ...

Какво става, ако получа представа, че данните ми са в опасност?

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

Ами ако силата на звука на PII е твърде голяма, за да завъртите ефективно клавишите?

Ако голяма част от данните, които събирате, се считат за PII (медицински данни за такава), тогава може да имате проблем с декриптирането на всичко, запазването му в паметта и смесването му. Тогава може да помислите за въвеждане на допълнителна стъпка към криптиране: вместо да имате един криптовалут, ще имате главен ключ и ефимерен ключ. Използвате първата, за да криптирате данните, но никога не ги съхранявате в некриптиран вид. Шифровате главния ключ с помощта на ефемерния ключ. След това, винаги когато искате да завъртите ефемерния си ключ, повтаряте процеса от горната точка, но само дешифрирате и отново шифровате главния ключ.

Какво става, ако трябва да изтрия част от PII сега, а друга по-късно?

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

И това обобщава ...

Има обаче едно нещо, което трябва да имате предвид: продуктите никога не са и никога няма да са съвместими с GDPR. Компаниите трябва да се съобразяват с PII. Продуктите могат само да улеснят този навик по-лесно или по-трудно.

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

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