تخطَّ إلى المحتوى

أداة متصفّح

أخرِج مفاتيحك السرية من Google Authenticator.

يعرض Google Authenticator رمز QR يحمل كل حساب على هاتفك، ثم لا يمنحك أي طريقة لقراءته. خُذ لقطة شاشة لذلك الرمز، وأفلِتها هنا، فتحصل على المفتاح السري بـ base32 ورابط otpauth لكل حساب.

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

الأداة

أفلِت هنا لقطة شاشة لرمز التصدير

أو الصق واحدة، أو اختر ملفًا، أو وجّه الكاميرا إلى الهاتف.

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

قبل أن تبدأ

تعامل مع رمز التصدير كما تتعامل مع كلمة مرور.

هذا ليس تحذيرًا شكليًّا. رمز QR للتصدير شيء أخطر مما يفترض معظم الناس، بثلاث طرق محددة تستحق أن تعرفها قبل أن تُنشئ واحدًا.

  • يحمل كل المفاتيح، لا صورة لرموزك

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

  • تغيير كلمة المرور لا يُبطل رمز التصدير

    كلمة مرور جديدة، أو هاتف جديد، أو حذف التطبيق: لا شيء من ذلك يُبطل مفتاحًا سريًّا مُصدَّرًا. الشيء الوحيد الذي يفعل ذلك هو إيقاف المصادقة الثنائية ثم تفعيلها من جديد عند كل خدمة، فيصدر مفتاح جديد ويُسحب القديم.

  • لقطة الشاشة تبقى بعد انتهاء اللحظة

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

ما يعود إليك

كل الحقول، ومن أين جاء كل واحد منها.

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

  • المفتاح السري

    ترميز base32 وفق RFC 4648، بأحرف كبيرة وبلا حشو، كما يعرضه تطبيق المصادقة تمامًا. ستة عشر محرفًا لمفتاح من عشرة بايتات، واثنان وثلاثون لمفتاح من عشرين بايتًا. هذا هو بيان الاعتماد كله. وكل ما عداه بيانات وصفية عنه.

  • الجهة المُصدِرة والحساب

    الخدمة والحساب التابع لها. تضع Google الجهة المُصدِرة أحيانًا في حقل خاص بها، وتدمجها أحيانًا أخرى في تسمية الحساب على هيئة «‏Issuer:account»، فيُقرأ الاثنان ويُعرضان منفصلين.

  • الخوارزمية وعدد الأرقام والنوع

    في كل الحالات تقريبًا: SHA-1 وستة أرقام وقائم على الوقت، لأن هذا ما تنشره الخدمات فعلًا. وحين يترك التصدير أحدها غير محدد، تُستخدم القيمة الافتراضية المتعارف عليها ويُوسَم الحقل بأنه قيمة افتراضية لا بيانات.

  • رابط otpauth

    رابط otpauth:// قياسي، يُعاد بناؤه من الحقول أعلاه بدل أن يُقرأ من الرمز، فيكون بالضبط ما يتوقعه تطبيق مصادقة آخر. ولكل واحد منها رمز QR أيضًا، جاهز للمسح مباشرة داخل تطبيق مختلف.

  • الفترة الزمنية، موسومة بصدق

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

  • الحسابات القائمة على العدّاد

    قليل من الحسابات قائم على العدّاد لا على الوقت، لذلك لا يتغيّر رمزه. ويُعرض العدّاد كما جاء في التصدير. وتعامل مع هذه بحذر: استخدام الرمز يزيد العدّاد عند الخدمة، والنسخة التي تخلّفت عنه يتوقف عملها.

كيف يعمل

خمس عمليات فك ترميز، واحدة بعد الأخرى.

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

تنفّذ الأداة العمليات الخمس كلها بنفسها، بلا أي شفرة من طرف ثالث. وقراءة رمز QR هي الجزء الأكبر بفارق واسع، لأن المتصفّح لا يقوم بها عنك: فكاشف الرموز الشريطية المدمج غير موجود في Safari وFirefox، ولذلك كُتب القارئ من المواصفة.

  1. 01

    قراءة رمز QR

    تُختزل الصورة إلى أسود وأبيض، وتُحدَّد أنماط الأركان الثلاثة، وتُضبَط شبكة تمر بها (بمنظور مائل، إن كانت الصورة مأخوذة من زاوية)، وتُعايَن كل وحدة، ويُصلح تصحيح الأخطاء بـ Reed-Solomon ما أخطأت فيه الكاميرا. فيخرج نص يبدأ بـ otpauth-migration://offline?data=.

  2. 02

    فك ترميز معامل data

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

  3. 03

    تحليل رسالة protobuf

    تلك البايتات رسالة protobuf غير موثَّقة تحمل سجل حساب متكررًا، ورقم إصدار، وحجم الدفعة، ورقم الجزء فيها، ومعرّفًا للدفعة. ولكل سجل حساب سبعة حقول: المفتاح السري الخام، والاسم، والجهة المُصدِرة، وأرقام تمثّل الخوارزمية وعدد الأرقام والنوع والعدّاد.

  4. 04

    إعادة ترميز المفتاح السري بـ base32

    يأتي المفتاح السري في صورة بايتات خام. وتطبيقات المصادقة تعرضه بـ base32، فيُعاد ترميز البايتات لإنتاج النص الذي كنت ستكتبه بيدك في تطبيق آخر.

  5. 05

    توليد رمز للتحقق منه

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

الخصوصية

الادّعاء محدود، ويمكنك اختباره.

ادّعاء خصوصية لا تستطيع التحقق منه هو تسويق. فهذا هو الادّعاء بدقة، وهذا ما يمكنك فعله في عشر ثوانٍ للتحقق منه.

صورتك ومفاتيحك السرية لا تُرسل أبدًا

الصورة التي تُفلِتها، والحمولة المفكوكة، والمفاتيح السرية، والرموز المولَّدة تبقى كلها في هذا التبويب. والشفرة التي تتعامل معها لا تحتوي أي استدعاء لـ fetch أو XMLHttpRequest أو WebSocket أو EventSource أو sendBeacon على الإطلاق، والنسخة التي تعمل دون اتصال تضيف سياسة أمان محتوى ليفرض المتصفّح ذلك بنفسه بدل أن يأخذ بكلام الشفرة.

الاختبار الذي يستحق أن تجريه بنفسك

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

ما تحمّله هذه الصفحة نفسها

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

لا شيء يُخزَّن

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

ما يفعله المحو فعلًا

يكتب المحو أصفارًا فوق بايتات المفتاح السري. وهذا يستحق أن تفعله، لكنه ليس تنظيفًا للذاكرة: فالسلاسل النصية في JavaScript لا يمكن الكتابة فوقها، وقد يحتفظ محرّك JavaScript بنسخ لا نستطيع نحن ولا أنت الوصول إليها. وإغلاق التبويب هو ما يُنهي الأمر، ولا تستطيع أي صفحة أن تدّعي بصدق أكثر من ذلك.

منشورة، وصغيرة بما يكفي لقراءتها

الأداة كلها حزمة واحدة مرخَّصة بـ MIT بلا أي اعتماديات في وقت التشغيل، فلا سلسلة توريد خلفها تحتاج إلى تدقيق. وفيها قارئ رموز QR، وقارئ protobuf، ومرمِّزا base32 وbase64، ودوال كلمات المرور لمرة واحدة، واختباراتها مثبَّتة على متجهات اختبار منشورة لا على نفسها.

الحصول على الرمز

أين يختفي رمز التصدير.

لا يُسمّى مفتاح تصدير ولا نسخة احتياطية، وهو ليس في الإعدادات. تضعه Google تحت باب الانتقال إلى هاتف جديد، ولهذا لا يجده معظم الناس أبدًا.

  1. 01افتح Google Authenticator على الهاتف الذي يحمل الحسابات.
  2. 02افتح القائمة، ثم اختر «نقل الحسابات» (‏Transfer accounts).
  3. 03اختر «تصدير الحسابات» (‏Export accounts)، وصادِق على هويتك عندما يطلب ذلك.
  4. 04أشِّر على الحسابات التي تريدها وتابع. فيظهر رمز QR.
  5. 05خُذ لقطة شاشة لذلك الرمز، أو وجّه كاميرا هذه الأداة إلى الهاتف.

إن حصلت على أكثر من رمز

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

لقطة شاشة لا صورة فوتوغرافية

لقطة الشاشة تُقرأ من أول مرة. أما تصوير شاشة بالكاميرا فيضيف وهجًا وتموّجات موريه ومنظورًا مائلًا، والقارئ يتعامل مع ذلك كله ولا يحتاج إلى أي منه. وإن كنت تصوّر هاتف شخص آخر، فاملأ الإطار بالرمز واحمل الكاميرا في مواجهته مباشرة.

بعد ذلك

ما تفعله بالمفتاح السري بعد أن تحصل عليه.

انقله إلى تطبيق آخر

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

قارِن رمزًا واحدًا بما على الهاتف

قبل أن تعتمد على أي من هذا، قارِن رمزًا مولَّدًا بما يعرضه Google Authenticator للحساب نفسه في اللحظة نفسها. إن تطابقا فالمفتاح صحيح. وإن لم يتطابقا فالمفتاح خطأ ولا قيمة لأي شيء آخر في النتيجة.

احفظه كما تحفظ كلمة مرور

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

احذف اللقطة

بما في ذلك من ألبوم «المحذوفة مؤخرًا»، وقبل أن تزامنها مكتبة صورك إلى أي مكان. ثم امحُ محتوى الأداة وأغلِق التبويب.

التفاصيل

التفاصيل الدقيقة.

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

التشغيل
بالكامل في متصفّحك. بلا خادم، وبلا حساب، ولا شيء تثبّته.
القراءة
رموز تصدير Google Authenticator (‏otpauth-migration)، ورموز otpauth لحساب واحد
الإدخال
السحب والإفلات، أو اللصق، أو منتقي الملفات، أو كاميرا الجهاز
الإخراج
مفتاح سري بـ base32، والجهة المُصدِرة، واسم الحساب، والخوارزمية، وعدد الأرقام، والنوع، والعدّاد، ورابط otpauth، ورمز QR للاستيراد، ورمز حي
الشبكة
لا شيء. لا fetch ولا XMLHttpRequest ولا WebSocket ولا EventSource ولا sendBeacon في أي موضع من الأداة.
التخزين
لا شيء. لا ملفات تعريف ارتباط، ولا تخزين محلي، ولا تخزين جلسة، ولا قاعدة بيانات، ولا ذاكرة مؤقتة.
دون اتصال
نعم. نسخة بملف واحد تعمل من قرصك مع إيقاف الشبكة.
المتصفّحات
‏Chrome وEdge وFirefox وSafari 16 أو أحدث. وتحتاج الكاميرا إلى صفحة آمنة، لذلك قد لا تعمل من ملف محلي.
الاعتماديات
لا شيء في وقت التشغيل. فمرمِّز رموز QR وقارئ protobuf ومرمِّزا base32 وbase64 ودوال كلمات المرور لمرة واحدة كلها في الحزمة.
الرخصة
MIT

أسئلة تستحق أن تُطرح.

هل من الآمن إدخال رمز التصدير في موقع ويب؟
الجواب الصادق أنه لا ينبغي أن تُدخل بيان اعتماد في صفحة لا تستطيع التحقق منها، ولهذا فهذه الصفحة قابلة للتحقق. لا شيء يُرسل، والشفرة المصدرية منشورة، وهناك نسخة بملف واحد يمكنك تنزيلها وتشغيلها مع إيقاف شبكتك. وإن كنت تفضّل ألا تثق بصفحة على الإطلاق، فاستخدم تلك النسخة.
هل يُرسل أي شيء إلى خوادمكم؟
لا، ولا يوجد لدينا ما يمكنه استقباله. فك الترميز والتحليل وتوليد الرموز كلها تجري في متصفّحك. افتح لوحة الشبكة في متصفّحك، واستخرج رمزًا، ولن ترى أي طلبات إطلاقًا.
هل يمكنني استخدامها دون اتصال بالإنترنت؟
نعم. نزّل ملف HTML الواحد من صفحة الإصدارات في المستودع وافتحه. لا يحتوي أي مرجع خارجي من أي نوع، وفيه سياسة أمان محتوى تمنع الاتصالات منعًا تامًّا. وكل شيء يعمل عدا الكاميرا، فبعض المتصفّحات لا يمنحها لصفحة مفتوحة من ملف؛ أما إفلات لقطة شاشة أو لصقها فيعمل دائمًا.
إن حصل أحد على رمز التصدير الخاص بي، كيف أُبطله؟
لا يمكنك إبطال مفتاح سري بمفرده. أوقف المصادقة الثنائية عند الخدمة المتأثرة ثم أعد إعدادها، فيصدر مفتاح جديد ويصبح القديم بلا قيمة. وتغيير كلمة المرور لا يفعل ذلك، ولا حذف التطبيق، ولا إعادة ضبط الهاتف.
أعطتني Google عدة رموز QR. ماذا الآن؟
التقطها كلها وأضفها واحدًا واحدًا. تتشارك معرّف دفعة واحدًا ويحمل كل واحد رقمه الخاص، فتندمج بأي ترتيب وتخبرك الأداة أي الأجزاء ما زال ناقصًا. وإعادة إضافة رمز لديك أصلًا لا تضر. أما الرموز من تصديرين مختلفين فتُرفض ولا تُدمج، لأن القائمة المجتمعة ستكون قائمة لم تكن موجودة على هاتفك قط.
لماذا يقول كل حساب ثلاثين ثانية؟
لأن صيغة التصدير لا تحتوي حقلًا للفترة الزمنية، ويستخدم Google Authenticator ثلاثين ثانية لكل شيء. القيمة صحيحة، وهي لم تُقرأ من التصدير، ولهذا تُوسَم بأنها قيمة افتراضية بدل أن تُعرض كبيانات. ولو استخدمت خدمة فترة مختلفة، فلن يخبرك تصدير من هذا التطبيق بذلك.
أحد حساباتي لا يتغيّر رمزه.
ذلك حساب قائم على العدّاد، والمقصود أن رمزه لا يتغيّر. ويُعرض عدّاده كما جاء في التصدير. وتعامل معه بحذر: استخدام الرمز يزيد العدّاد عند الخدمة، فالنسخة التي تخلّفت عنه سيتوقف قبولها.
ما الخوارزميات المدعومة؟
‏SHA-1 وSHA-256 وSHA-512، باستخدام وظائف التشفير في المتصفّح. ويظهر MD5 في قائمة الخوارزميات في هذه الصيغة لكن المتصفّحات لا تستطيع حسابه، فلا يُولَّد رمز له؛ أما المفتاح السري وكل المعاملات الأخرى فتُعاد بصورة صحيحة. وعمليًّا تستخدم الخدمات SHA-1 مع ستة أرقام، وGoogle Authenticator يتجاهل ما عدا ذلك على أي حال.
الكاميرا لا تعمل.
تحتاج إلى صفحة آمنة، فلن تعمل عبر http العادي وقد لا تعمل من عنوان ملف. والرفض يُحفظ عادةً، فراجع إعدادات الموقع في متصفّحك. وأيًّا كان ما تفعله الكاميرا، فإفلات لقطة شاشة أو لصقها يعمل في كل مكان.
لا تفتح صورة iPhone الخاصة بي.
صور iPhone بصيغة HEIC، ولا يفك ترميزها أي متصفّح غير Safari. خُذ لقطة شاشة بدل الصورة، أو حوّل الملف إلى PNG أو JPEG. ولقطة الشاشة هي المُدخل الأفضل على أي حال، لأنها بلا وهج ولا منظور مائل.
هل يمكنني نقل هذه إلى تطبيق مصادقة مختلف؟
نعم. لكل حساب رمز QR خاص به بصيغة otpauth القياسية التي يقرأها كل تطبيق مصادقة، ويمكنك كتابة مفتاح base32 بيدك بدلًا من ذلك. وقارِن رمزًا مولَّدًا واحدًا بهاتفك قبل أن تحذف منه أي شيء.
رأيت من يفعل هذا بـ zbarimg وبرنامج مكتوب بـ Go.
تلك هي عمليات الفك الثلاث نفسها مع ثلاث عمليات تثبيت قبلها: قراءة رمز QR، وفك ترميز معامل data بـ base64، وتحليل رسالة protobuf. وهذه الأداة تفعل ذلك كله في صفحة، والحزمة التي تقوم عليها منشورة إن كنت تفضّل كتابة سكربت. ولا شيء هنا يغلّف تلك الأدوات؛ فقارئ رموز QR وقارئ protobuf مكتوبان من مواصفتيهما.

لك أن تحتفظ بها، ولك أن تتحقق منها.

حزمة واحدة مرخَّصة بـ MIT بلا أي اعتماديات في وقت التشغيل. اقرأها، أو انسخها لنفسك، أو شغّلها دون اتصال، أو استخدمها هنا فحسب.

اقرأ الشفرة المصدرية