الناتج المحلي الإجمالي الحق في أن تنسى مقابل Datomic

اسمحوا لي أن أبدأ مع التوافه سريعة: هل تعرف هذا الرجل؟

إذا كانت الإجابة "نعم" ، فهناك فرص كبيرة أن تكون على دراية بهذا الاقتباس:

مع القوة العظيمة تأتي المسؤولية العظيمة
- العم بن

ملاحظة: أدرك أن أصل هذا الاقتباس قد يصل إلى فولتير ، ولكن مهلا ، ليس جذابًا مثل Spider-man!

إذا كنت تقرأ هذا ، فأعتقد أنك معتاد بالفعل على Datomic وفي حب وظيفة السفر عبر الزمن. انها قوية جدا! ولكن ، كما أشير أعلاه ، تأتي هذه القوة بتكلفة. على سبيل المثال - إنه يجعل الامتثال الناتج المحلي الإجمالي معقدة بعض الشيء.

نعم أنا أعلم ، مرة أخرى كنت تقرأ عن إجمالي الناتج المحلي. كلنا خضعنا بالفعل ، لا راحة للأشرار. ولكن دعونا نذكر أنفسنا ببعض النقاط الرئيسية للالتزامات التي يضعها على ظهورنا:

  • حماية معلومات التعريف الشخصية (PII)
  • حذف PII بشكل دائم إذا طلب منا مالكها (الحق في النسيان)
  • التدقيق PII يصل

هناك ، بالطبع ، المزيد من اللوائح. ومع ذلك ، فإنهم يتجاوزون نطاق مدونة المدونات هذه ، لذا سأتركها خارج هذا النطاق.

تضارب المصالح

لذا فإن المشكلة التي نعالجها هنا واضحة إلى حد ما: فمن ناحية ، علينا التزام بحذف PII كلما طلب منا مالكها ذلك. من ناحية أخرى ، لدينا القدرة على العودة في الوقت المناسب إلى اللحظة التي سبقت ذلك الطلب.

هنا ، اسمحوا لي أن أريك باستخدام مثال سريع:

في يوم الاثنين ، يدخل John Doe في webapp ويسجل نفسه:

@ (د / للعمليات
   كون
   [{: user / id 111
     : اسم المستخدم / "جون دو"
     : المستخدم / الهاتف "123456789"}])
=>
{: db-before datomic.db.Db ،
 @ 5193c0be: ديسيبل بعد ،
 datomic.db.Db @ 43e943fe ،
 : tx-data [#datom [13194139534313 50 #inst "2018-06-06T13: 07: 58.664-00: 00" 13194139534313 true]
           #datom [17592186045418 63 111 13194139534313 true]
           #datom [17592186045418 64 "John Doe" 13194139534313 true]
           #datom [17592186045418 65 "123456789" 13194139534313 true]] ،
 : tempids {-9223301668109598066 17592186045418}}

دعنا نلاحظ المعاملة التي دفعت المستخدم الجديد إلى قاعدة البيانات لدينا:

  • معرف الهوية لتلك المعاملة هو 13194139534313
  • حدثت هذه المعاملة في #inst ”2018–06–6T13: 07: 58.664–00: 00"

يلعب مع التطبيق لبضعة أيام. على الرغم من أنه قرر يوم الجمعة أنه غير راض عن الخدمة ، فإنه يطلب منا حذف بياناته. وبالتالي نحن نلتزم:

@ (د / للعمليات
   كون
   [[: db.fn / retractEntity [: user / id 111]]])
=>
{: db-before datomic.db.Db ،
 @ 43e943fe: ديسيبل بعد ،
 datomic.db.Db @ 37505082 ،
 : tx-data [#datom [13194139534315 50 #inst "2018-06-06T13: 15: 23.436-00: 00" 13194139534315 true]
           #datom [17592186045418 63 111 13194139534315 false]
           #datom [17592186045418 64 "John Doe" 13194139534315 false]
           #datom [17592186045418 65 "123456789" 13194139534315 false]] ،
 : tempids {}}

نحن نجري فحصًا نهائيًا للتأكد من أن كل شيء على ما يرام:

(->
  (d / db conn)
  (d / الكيان [: user / id 111]))
=> لا شيء

ياي! ذهب جون دو - يمكننا العودة إلى العمل ، أليس كذلك؟ حسننا، لا. هل تتذكر الملاحظات التي أخذناها بشأن المعاملة التي أنشأت حساب John Doe؟ دعونا نستخدمها للعودة في الوقت المناسب:

(->
  (d / db conn)
  (d / as-of 13194139534313)
  (d / الكيان [: user / id 111]))
=> #: db {: id 17592186045418}

ولكن مهلا ، لقد حصلنا على ظهرك! لقد اكتشفنا ذلك وسنكون سعداء لمشاركته معك.

إذا كان أفلاطون على حق ...

تخيل اتلانتيس موجودة حقا. تخيل أيضًا أن لديهم مسلة ضخمة في وسط ميدانهم الرئيسي. وأن تلك المسلة قد حفرت رقم هاتفك الخاص بك وتفضلت بتجميدها من Dunkin Donuts. كيف الناتج المحلي الإجمالي غير متوافقة مع ذلك؟ الجواب - إنه جيد تمامًا. اختفت المدينة في الهواء الرقيق (أو الماء) ، وبالتالي فإن شغفك السري بحل الكعك لا يزال آمنًا بيني وبينك (shhh!)

مجرد قفل لهم

حسنا ، ولكن النكات جانبا. الخوارزمية لمشكلتنا هي ميتة بسيطة. سنستفيد من تمزيق التشفير لهذا الغرض.

  1. قم بإنشاء مفتاح ستستخدمه لتشفير PII. يجب عليك تخزين هذا المفتاح بطريقة تسمح لك بحذفه بشكل موثوق عند الحاجة.
  2. استخدم مفتاح تشفير البيانات في الطريق وفك التشفير في طريق الخروج.
  3. عندما يحين الوقت ، ارم المفتاح بعيدًا.
كتلة حمراء ترى أعلاه يصور الهيكل عند استخدام Hashicorp Vault. بالطبع ، قد يختلف باختلاف الأداة التي ستختارها.

فكيف رمي مفتاح بعيدا بعد كل شيء؟

الآن لديك العديد من الخيارات للاختيار من بينها. كما هو الحال دائمًا ، لا يوجد حل واحد يناسب الجميع ، لكن اسمحوا لي أن أقدم لك بعض الأفكار:

  • : ديسيبل / المكوس - نعم ، يمكنك فقط إجبار Datomic على نسيان هذا المفتاح تشفير معين تماما. ولكن إذا كنت تريد تشفير بياناتك بشكل صحيح ، فلا يمكنك الاحتفاظ بالمفتاح في نفس المكان الذي تخزن فيه معلومات التعريف الشخصية.
  • قاعدة بيانات منفصلة مع قدرات الحذف - عمودين فقط: معرف المستخدم ومفتاح التشفير. سهل هكذا. لكن هذا يضع الكثير من الجهد على ظهرك - عليك الحفاظ على قاعدة البيانات هذه ، ومراقبة صحتها وما زال هناك التزام بمراجعة حسابات الوصول.
  • Hashicorp Vault - إنها أداة قوية جدًا تناسب مشكلتنا تمامًا. لديها سياسات وصول قابلة للتكوين بشكل كبير ، ومراجعة الحسابات ، وتقسيم الأسرار ، ووضع التوافر العالي ، إلخ. ومع ذلك ، للحصول على كل تلك التروس الدوارة ، فإن الأمر يتطلب الكثير من التكوين والموارد. البرنامج التعليمي الرسمي لوضع توافر عالية باستخدام AWS يذكر 8 حالات! لذلك إذا كان حجم مشكلتك يبرر استثمار الجهد في Vault - فابحث عن ذلك!
  • حلول AWS - يوجد الآن ثلاثة منتجات على الأقل يمكن استخدامها في هذه المشكلة - Key Management Service ، Secrets Manager و Systems Manager Parameter Store

قررنا الذهاب إلى متجر Parameter Store لتسعيره (من الصعب الفوز مجانًا). هناك بعض الانتقادات حول هذا الأمر بسبب حدود الطلب ، لذا سنحتاج عاجلاً أم آجلاً إلى الترحيل إلى شيء أكثر أداءً. لهذا السبب قد يكون وضع فكرة وراء الحدود فكرة جيدة. ينبغي أن يساعد على الهجرة بسهولة نسبية.

ولكن ماذا لو…

ماذا لو حصلت على حدس بأن بياناتي في خطر؟

ثم تريد تدوير مفاتيح التشفير الخاصة بك. اعتمادًا على الحل الذي اخترته ، قد يكون هذا حلاً يقدمه التصميم. وإلا فأنت تريد فقط فك تشفير بياناتك ، وإنشاء مفتاح جديد ، وتشفيرها مرة أخرى باستخدام المفتاح الجديد هذه المرة ، وتخزين البيانات في Datomic وحذف المفتاح القديم.

ماذا لو كان حجم PII كبيرًا جدًا بحيث لا يمكن تدوير المفاتيح بشكل فعال؟

إذا كان الكثير من البيانات التي تجمعها يُعتبر PII (بيانات طبية لأحدها) ، فقد تواجه مشكلة في فك تشفير كل شيء ، والاحتفاظ به في الذاكرة والاختلاط به. ثم قد تفكر في إدخال خطوة إضافية للتشفير: بدلاً من الحصول على مفتاح تشفير واحد ، سيكون لديك مفتاح رئيسي ومفتاح سريع الزوال. يمكنك استخدام السابق لتشفير البيانات به ، ولكن لا يمكنك تخزينه مطلقًا في شكل غير مشفر. تقوم بتشفير المفتاح الرئيسي باستخدام المفتاح المؤقت. ثم ، عندما تريد تدوير المفتاح المؤقت ، يمكنك تكرار العملية من النقطة أعلاه ولكن فقط فك تشفير المفتاح الرئيسي وإعادة تشفيره.

ماذا لو اضطررت إلى حذف جزء من PII الآن والبعض الآخر لاحقًا؟

تخيل أنك محاسب. إذا طلب منك عميلك حذف معلوماته الشخصية ، فعليك الالتزام بها وحذفها في أسرع وقت ممكن. لكن جزءًا من تلك البيانات سيكون ضروريًا في حالة التحقيقات الضريبية. في هذه الحالة ، قد ترغب في تقسيم معلومات التعريف الشخصية الخاصة بك إلى مستويات متعددة. سيكون لكل واحد مفتاح تشفير منفصل. يعمل الباقي كما في النقاط المذكورة أعلاه.

وهذا يلخص ...

هناك شيء واحد عليك أن تضعه في الاعتبار: المنتجات لن تكون أبدًا ولن تكون متوافقة مع إجمالي الناتج المحلي. إنها الشركات التي يجب أن تحترم PII. المنتجات يمكن أن تجعل هذه العادة أسهل أو أصعب.

إذا لاحظت أي خلل في تفكيرنا ، فيرجى إخبارنا بذلك. إذا كان لديك أي تعليقات أخرى ، يرجى أيضًا إخبارنا بذلك.

لأعلى بعد ذلك: سأكتب منشورًا يتضمن مثالًا أكثر عمقًا لاستخدام متجر المعلمات في تطبيقات الويب لدينا. لحن!