أدوات المطورين · SHA حاسبة التجزئة
عنونة المحتوى: كيف يستخدم Git وDocker وnpm SHA الملخصات كأسماء
· خلفية
شا-256 عامل ميناء التشفير سير عمل المطور
إن التزامات Git وخلاصات صور الحاوية وسلاسل تكامل ملف القفل كلها نفس الفكرة: تسمية البيانات حسب التجزئة الخاصة بها. يشرح هذا المنشور معالجة المحتوى وما يكسبه كل نظام بيئي منه.
sha256: في عملية سحب عامل الإرساء - ما هي هذه السلسلة ولماذا لا تتغير أبدًا لنفس الصورة
تستخدم أنظمة التحكم في الإصدارات وأوقات تشغيل الحاويات ومديري الحزم نفس فكرة التسمية: تتم تسمية الملف أو مجموعة البايتات من خلال الملخص SHA الخاص به. في Git، يتم حساب معرف الالتزام 40 المكون من حرف SHA-1 (أو الحرف 64 SHA-256 في المستودعات الحديثة) من محتوى الالتزام - الشجرة والمؤلف والطابع الزمني والرسالة. قم بتغيير بايت واحد وستتغير SHA. في Docker، كل ملخص طبقة عبارة عن تجزئة SHA-256 لمحتويات الطبقة، ويتم حساب ملخص الصورة من البيان. في npm ومديري الحزم الآخرين، تقوم حقول التكامل بتخزين SHA-512 ملخصات كرات القطران للتحقق من التنزيلات. تعني عنونة المحتوى أن الاسم يعتمد فقط على البايتات، وليس على قاعدة بيانات مركزية أو طابع زمني.
الفائدة هي الثبات داخل كل نظام. التزام git SHA-256:abc... سيشير دائمًا إلى نفس الشجرة والرسالة لأن التجزئة تحدد الهوية. إذا ادعى شخص ما أن لديه التزامًا مختلفًا بنفس SHA، فهو يدعي أن نفس البايتات تنتج تجزئتين مختلفتين، مما يؤدي إلى كسر التشفير. يصبح إلغاء البيانات المكررة تلقائيًا: ينتج ملفان لهما وحدات بايت متطابقة نفس الملخص، بحيث يمكن لأنظمة التخزين تخزين وحدات البايت مرة واحدة والرجوع إليها مرتين. يصبح التحقق من التكامل بسيطًا مثل إعادة حساب الملخص والمقارنة: إذا تم تعديل البايتات أثناء النقل أو أثناء الراحة، فلن يتطابق الملخص بعد ذلك.
تسمية البيانات حسب تجزئتها - فكرة معالجة المحتوى ولماذا تجعل إلغاء البيانات المكررة والنزاهة أمرًا مجانيًا
يقوم Git بتخزين الكائنات - الالتزامات والأشجار والنقط والعلامات - المرتبطة بخلاصة SHA الخاصة بهم. يأخذ الأمر `git cat-file` معرف الكائن ويقوم باسترداد البايتات. يتم معالجة مخزن العناصر للمحتوى: يمكنك الطلب عن طريق الملخص، وليس عن طريق الموقع أو عن طريق الاسم. عندما تقوم باستنساخ مستودع ما، يتحقق git من كل كائن عن طريق إعادة حساب الملخص الخاص به والتحقق من الملخص المعبأ في عملية النقل. يتم الانتقال من SHA-1 إلى SHA-256 بشكل تدريجي؛ يمكن أن تدعم المستودعات كلا من أجل التوافق. يقوم التنسيق الموجود على القرص بتخزين نوع الكائن وحجمه والبايتات المضغوطة. يتم حساب الملخص على النموذج الكنسي غير المضغوط.
يمكن لمستودعات Git الحديثة استخدام SHA-256، والانتقال مستمر لأن SHA-1 أصبحت التصادمات عملية الآن (تم توضيحها في 2017 وتم تحسينها في 2020). يحتوي الالتزام في مستودع باستخدام SHA-256 على معرف سداسي عشري مكون من 64 بدلاً من 40. يحسب الأمر `git hash-object` SHA لكائن ثنائي كبير الحجم (محتويات الملف) دون تخزينه؛ `git commit-tree` يحسب SHA لبنية الشجرة والرسالة. كلا العمليتين حتميتان: نفس البايتات تنتج دائمًا نفس الملخص. هذه هي الطريقة التي يمكن بها لـ GitHub وغيره من المزورين عرض الالتزامات SHA بشكل متسق - فهم يحسبون نفس الملخص الذي تم حسابه بواسطة استنساخ المؤلف.
يستخدم Git كائنات تتناول المحتوى ويمكن لهذه الأداة إعادة إنتاج الملخصات النصية؛ تتطلب تفاصيل الترحيل مصادر خاصة بـ Git
يتم إنشاء صور Docker في طبقات، حيث تكون كل طبقة عبارة عن دلتا نظام الملفات (التغييرات من الطبقة السابقة). تحدد مواصفات الصورة OCI كيفية حساب ملخص الطبقة وملخص بيان الصورة. ملخص الطبقة هو SHA-256 لملف tar المضغوط الذي يحتوي على ملفات الطبقة. البيان عبارة عن مستند JSON يسرد الطبقات وملخصاتها وبياناتها التعريفية. ملخص الصورة هو SHA-256 للبيان JSON نفسه. عند سحب صورة باستخدام علامة مثل `latest`، يبحث السجل عن العلامة ويعيد ملخص البيان. يمكنك بعد ذلك سحب الملخص مباشرة، مما يضمن حصولك على نفس البايتات تمامًا - جميع الطبقات والبيانات التعريفية - في كل مرة.
يعرض الأمر `docker inspect` الموجود على الصورة المحلية ملخصها. يؤدي تشغيل نفس الصورة من نفس العلامة على جهازين إلى إنتاج نفس الملخص إذا كان السجل لا يزال يحتفظ بهذه العلامة التي تشير إلى نفس البيان. تجعل معالجة المحتوى سلاسل توريد الصور قابلة للتدقيق: يمكن لخط أنابيب CI/CD التحقق من أن الصورة التي نشرها تتطابق مع الملخص الموجود في سجل الإنشاء، ويمكن لفحص الأمان الإبلاغ عن جميع الصور المعروفة بأنها تحتوي على ثغرة أمنية معينة من خلال الملخص الخاص بها بدلاً من العلامة، والتي يمكن نقلها.
الحاويات — OCI البيانات وملخصات الطبقة، ولماذا يمكن للعلامة أن تتحرك ولكن لا يمكن للملخص أن يتحرك
يستخدم مديرو الحزم الملخصات للتحقق من التنزيلات ضد التلاعب أو الفساد. في npm، يتضمن الملف `package-lock.json` حقل `integrity` لكل تبعية، يحتوي على تجزئة (عادةً SHA-512) والتشفير (عادةً base64). عندما يقوم npm بتنزيل كرة القطران، فإنه يعيد حساب التجزئة ويقارنها. إذا كانت التجزئات غير متطابقة، فسيفشل التثبيت. يستخدم Go ملف `go.sum` ذو بنية مشابهة: مسار الوحدة، الإصدار وSHA-256 لمصدر الوحدة. تستخدم البضائع المجاميع الاختبارية في `Cargo.lock`. المبدأ متطابق: يتم حساب الملخص مرة واحدة عند حل التبعية لأول مرة، ويتم فحصه في كل عملية تثبيت لاحقة.
لا يتطلب التحقق من النزاهة تحميل الحزمة إلى سلطة التوقيع أو تخزين التوقيعات بشكل منفصل. الملخص هو التحقق من النزاهة. للحصول على أقصى قدر من الضمان، تستخدم المشاريع `go.sum` الذي تم توقيعه بواسطة نظام الشفافية الخاص بمشروع Go، أو تكامل npm مع عمليات التحقق الأخرى، ولكن الحالة الأساسية بسيطة: يحسب الناشر الملخص مرة واحدة، ويسجله في ملف القفل، وتتحقق الأدوات الموجودة على جانب المستهلك من تطابق وحدات البايت التي تم تنزيلها.
تختلف ترميزات تكامل الحزمة؛ تم التأكيد هنا فقط على مخرجات SHA المدعومة لهذه الآلة الحاسبة
نفس البايتات من خلال نفس الخوارزمية تنتج دائمًا نفس الملخص، بغض النظر عن مصدر البايتات. ينتج عن البناء المحلي للمطور للالتزام نفس SHA-256 مثل نظام CI/CD الذي يقوم بفحص نفس المراجعة من نفس المستودع. إن إمكانية التكرار هذه هي سبب نجاح معالجة المحتوى: يمكنك التحقق من قطعة أثرية دون الثقة في آلية التسليم. يصبح الملخص التزامًا بالتشفير: تغيير بايت واحد حتى يبطله.
إن توزيع الملخص بشكل منفصل (قبل توزيع القطعة الأثرية) يحمي من التعديل أثناء الرحلة. يمكن لصفحة الويب المنشورة قبل الإصدار أن تعرض "expect SHA-256:abc..." ومن ثم يمكن للمستخدمين التحقق من التنزيلات مقابلها. التزام git المنشور في مستودع عام هو التزام بالبايتات؛ الملخص يثبت ذلك.
مثال عملي - متابعة نقطة واحدة من وحدات البايت للهضم إلى الاسم الذي تستخدمه الأداة لها
تقوم الأنظمة المختلفة بتشفير هضماتها بشكل مختلف. يستخدم Git الأحرف السداسية العشرية الصغيرة بشكل افتراضي (40 أو 64 أحرف سداسية عشرية). يستخدم Docker التنسيق `sha256:` متبوعًا بالست عشري. يستخدم npm وGo base64 في حقول التكامل. البايتات هي نفسها؛ يختلف التمثيل فقط إن ملخص SHA-256 الموجود فوق "abc" هو دائمًا نفس 256 bits، ولكن قد تراه كسلسلة سداسية عشرية مكونة من 64 أحرف، أو سلسلة أساسية 44 مكونة من أحرف 64 أو تسمية مثل `sha256:` متبوعة بأي منهما. التحويل بين الترميزات لا يؤدي إلى فقدان البيانات؛ الملخص هو نفس القيمة في كل تمثيل.
إن فهم الترميز مهم عند مقارنة الملخصات عبر الأدوات. إذا قام Git بطباعة ملخص سداسي عشري وأظهرت الأداة base64، فيجب عليك تحويل تمثيل واحد إلى الآخر للتحقق من مطابقته. تعرض حاسبة التجزئة ToolAcre SHA كلا من hex وbase64 لكل ملخص، مما يجعل من السهل التحويل أو الإسناد الترافقي مع الأنظمة الأخرى.
ما لا يغطيه هذا هو الترميزات المحددة التي تستخدمها كل أداة (hex مقابل base64)، والتي تمت تغطيتها في منشور منفصل
لا تقتصر معالجة المحتوى على التشفير، على الرغم من أن تجزئات التشفير تجعله آمنًا. المجموع الاختباري CRC32 أيضًا يتناول بيانات عناوين المحتوى، ولكن CRC32 التصادمات شائعة ويمكن تصنيع التصادمات؛ لا يضع هذا المستودع علامة على SHA-256 على أنه معطل، في حين أن CRC32 لا يتم تقديمه باعتباره بدائيًا لتكامل الخصومة. يعد اختيار خوارزمية التجزئة أمرًا مهمًا للأمان: SHA-256 هو المعيار الحديث للأنظمة التي تحتاج إلى حماية متكاملة ضد الخصوم. SHA-1 قديم فقط (يتم ترحيل Git والآخرين بعيدًا). يعد اختيار الخوارزمية الصحيحة قرارًا منفصلاً عن اختيار معالجة المحتوى كنظام تسمية.
تعد معالجة المحتوى جنبًا إلى جنب مع تجزئة التشفير أساسًا لتكامل سلسلة التوريد في البرامج الحديثة. يمكن التحقق من أن كل حزمة تقوم بتثبيتها، وكل حاوية تقوم بتشغيلها، وكل التزام تقوم بسحبه، هو وحدات البايت التي قصدها الناشر الأصلي، دون الاعتماد على النقل الآمن (على الرغم من أن النقل الآمن لا يزال ممارسة جيدة).
الخلاصة: التجزئة هي الهوية - تتيح لك حاسبة التجزئة ToolAcre SHA حساب نفس الملخصات التي تعتمد عليها هذه الأنظمة
تعتبر معالجة المحتوى مستقلة عن التشفير أو موقع التخزين أو آلية النقل. تنتج نفس البايتات نفس الملخص سواء تم تخزينها محليًا، في CDN، في سجل أو تم نقلها عبر HTTP أو آمنة HTTPS. الملخص عبارة عن التزام مشفر بالبايتات، والتحقق منه يتطلب البايتات والخوارزمية فقط، وليس أي خدمة خارجية. ولهذا السبب تتيح معالجة المحتوى إمكانية التحقق دون الاتصال بالإنترنت: يمكنك تنزيل ملف عبر قناة غير موثوقة، والتحقق من الملخص ومعرفة ما إذا كانت وحدات البايت أصلية أم لا.
تتيح لك حاسبة التجزئة ToolAcre SHA حساب نفس الملخصات التي تعتمد عليها هذه الأنظمة. الصق سلسلة أو شاهد ملفًا، وقم بتشغيل الآلة الحاسبة وراجع الملخصات SHA-256 وSHA-384 وSHA-512 التي يستخدمها Docker وGit وnpm والأدوات الأخرى داخليًا. قارن الملخص المحسوب الخاص بك مع المصدر الأصلي للتحقق من عدم تعديل البايتات. تقوم الآلة الحاسبة بتجزئة النص الذي قمت بلصقه إلى UTF-8؛ فهو لا يقوم بتجزئة الملفات أو المواد الرئيسية، وبالتالي فإن الحدود بين ما يمكنه تجزئته (إدخال النص) وما لا يمكنه تجزئته (الملفات الثنائية، ومفاتيح التشفير في أشكالها المشفرة) واضحة وموثقة.