Tink هي مكتبة تشفير مفتوحة المصدر كتبها المشفرة ومهندسي الأمان في Google. تقلل واجهات برمجة التطبيقات الآمنة والبسيطة من Tink من والصعوبات من خلال التصميم الذي يركز على المستخدم والتنفيذ الدقيق ومراجعات التعليمات البرمجية وإجراء اختبارات شاملة. اطّلع على قسم الأهداف في هذه الصفحة لمعرفة على مزيد من الرؤية حول الأهداف التي صممت Tink لتحقيقها.
يساعد Tink المستخدمين الذين ليس لديهم خلفية تشفير في تنفيذ العمليات مهام التشفير. وفي Google، تم نشر Tink في مئات المنتجات والأنظمة المختلفة.
لماذا يجب أن أستخدم Tink؟
أهم الأسباب لاستخدام Tink هي:
سهل الاستخدام
من الصعب الحصول على التشفير بشكل صحيح. باستخدام Tink، يمكنك تشفير أو توقيع البيانات باستخدام ضمانات أمان مدمَجة باستخدام بضعة أسطر من الرموز يمكن أن تقوم Tink أيضًا مساعدتك في تدوير المفاتيح أو تأمين المفاتيح باستخدام "أنظمة إدارة مفاتيح" خارجية (KMS).
الأمان
يضيف Tink وسائل حماية أمنية بالإضافة إلى المكتبات المعروفة مثل BuringSSL وبنية تشفير Java وتعرضها مباشرةً في الواجهات بحيث يمكن للمدققين والأدوات العثور على الثغرات بسرعة. يفصل Tink أيضًا واجهات برمجة التطبيقات التي من المحتمل أن تكون خطيرة، لذا يمكنك مراقبتها.
متوافق
تتوافق نصوص التشفير Tink مع مكتبات التشفير الحالية. تينك أيضًا تشفير المفاتيح أو تخزينها في Amazon KMS وGoogle Cloud KMS وAndroid Keystore وiOS Keychain.
من يستخدم Tink؟
يتم استخدام Tink على نطاق واسع من قبل العديد من الشركات، بما في ذلك Google وSquare وCitadel، بالإضافة إلى المئات من عملاء Google Cloud وشركاء Google Pay Tink أيضًا يدعم مكتبة Jetpack Security، التي تحمي العديد من تطبيقات Android الشائعة مثل Slack وAdidas وAirBnb وNextdoor.
أهداف التصويب
ما هي الأهداف الرئيسية لتطبيق Tink مقارنةً بمكتبات التشفير الأخرى؟ ما الآليات الرئيسية التي يستخدمها Tink لتحقيق هذه الأهداف؟
باختصار، لدى Tink هدفان:
- تعزيز رشاقة التشفير: يجب أن يتمكن المستخدمون من تغيير المفاتيح الخوارزميات بطريقة بسيطة.
- تفعيل مراجعات الأمان: يهدف Tink إلى السماح للمستخدمين بكتابة التعليمات البرمجية التي إمكانية مراجعة الأمان محليًا، وذلك عن طريق توفير واجهات توفر وضوح ضمانات الأمان.
الآليات الرئيسية التي تستخدمها Tink لتحقيق هذه الأهداف هي كما يلي:
- يوفر Tink النماذج الأولية والواجهات كتجريدات مهمة. هذه تتيح التجريدات للمستخدمين كتابة التعليمات البرمجية التي لا تُحدد المستخدم، ولكنه يحدد مفهوم الأمان المتوقع بدلاً من ذلك.
- يستخدم Tink مفهوم "مجموعة المفاتيح"، وهي مجموعة من المفاتيح التي مرتبطة بأساسي معين. ينتج عن ذلك كتابة المستخدمين للتعليمة البرمجية والتي تعمل مع مفاتيح متعددة.
- في Tink، لا يتم تحديد المفاتيح بواسطة مادة المفتاح الأساسية فحسب، ولكن وكذلك خوارزمية التشفير، وكذلك جميع المعلمات. هذا يعني أنّ يحدد مفتاح Tink دائمًا دالة تشفير فريدة من جميع والدوال التي يمكن أن توجد، ولا تترك مجالاً للتفسير.
وتوضّح الأقسام التالية هذه المفاهيم بمزيد من التفصيل.
رشاقة التشفير
جرِّب هندسة البرمجيات في Google، كتاب عن الدروس المستفادة في مجال هندسة البرمجيات، مع العنوان الفرعي "الدروس المستفادة من البرمجة بمرور الوقت". في ذلك، يذهب المؤلفون إلى جهدًا كبيرًا لاستنباط الآثار الناتجة عن حقيقة أن الأمور تتغير. هذا النمط وقد أثرت حقيقة أيضًا على الكثير من تصميم Tink. في التشفير، من المهم التي يستعد لها المرء للتغيير. ستتسرب المفاتيح، وسيتم تعطيل الخوارزميات. تعد القدرة على تبديل المفاتيح والخوارزميات أمرًا بالغ الأهمية للعديد من المستخدمين، الاستعداد يكون حكيمًا.
المراجعات الأمنية والمواقع المحلية
يروّج Tink لاستخدام الواجهات، مثل واجهة AEAD، والتي تتيح المستخدمين بتشفير البيانات. من بين ضمانات الأمان الأخرى، تُعرّف AEAD تضمن أن عمليات التشفير المتعددة لنفس السلسلة تؤدي إلى نتائج النصوص المشفرة.
لمعرفة كيفية استخدام هذا، لنفترض أن أحد المهندسين يريد تخزين بعض البيانات رقم تعريف في ملف تعريف ارتباط المستخدم. يمكن أن يوفروا فئة مثل هذه:
class IdEncrypter {
public static IdEncrypter createFromAead(Aead aead);
public String encrypt(long id) throws GeneralSecurityException;
public long decrypt(String encrypted) throws GeneralSecurityException;
};
يؤدي اجتياز Aead
إلى الحصول على السمات التالية:
- ويوضِّح الرمز أنّ تنفيذ
IdEncrypter
يتطلب وظيفته. مع خصائص الأمان التي يوفّرها "Aead
". بدلاً من ذلك، يمكنDeterministicAead
لن يكون كافيًا -- تتطلبIdEncrypter
أن يجري تشفير نفس المعرف مختلفة. ومن ناحية أخرى، حيث إن أخذ المعلمة كمثيل قد يتم بشكل مفرط استخدام خوارزمية AES GCM (أحد المثيلات المحدّدة لـAead
) صارمة: يكفي أن يكون أي Aead كافيًا لـ "IdEncrypter
" لأداء مهمته، ولا ينبغي أن تكون خوارزمية واحدة محددة. - ويمكن مراجعة هذه النقطة في الاعتبار. يقوم مُراجع الأمان
لست بحاجة إلى الاطّلاع على مستودع الرموز بالكامل
في مكان ما، أنشأ أحد الأشخاص فئة فرعية من
Aead
، وهي غير آمنة للاستخدام معIdEncrypter
. بدلاً من ذلك، توفر Tink خصائص الأمان التي تمتلك كائنات Aead، ويمكن للمراجع التأكّد من أنّ هذه العناصر كافية.
وعلى وجه الخصوص، تتطلب النقطة الثانية قدرًا كبيرًا من العناية. يطلب المستخدمون غالبًا إضافة
وهي خوارزميات "ليست تمامًا" Aead
توضح النقطة السابقة سبب
هذا أمر خطير: إذا كان هناك أي تنفيذ لـ Aead
يؤدي إلى
عدم تقديم ضمانات الأمان المطلوبة، قد يصبح IdEncrypter
غير آمن،
ويحتاج المهندس الذي يجري مراجعة أمنية إلى فحص تعليمات برمجية إضافية
للتحقق من إنشاء مثيل للكائن بشكل صحيح.