WebAuthn की मदद से बेहतर तरीके से पुष्टि करने की सुविधा चालू करना

समस्या

फ़िशिंग, वेब पर सुरक्षा से जुड़ी सबसे बड़ी समस्या है: पिछले साल हैक करने से जुड़े 81% खातों का गलत इस्तेमाल हुआ. इसके लिए, उन्हें कमज़ोर या चोरी किए गए पासवर्ड का इस्तेमाल करना पड़ा. इंडस्ट्री ने इस समस्या के लिए कई तरीकों से पुष्टि करने की सुविधा दी है. हालांकि, इसे कई तरीकों से लागू किया गया है और इनमें से ज़्यादातर से फ़िशिंग पर काबू पाया नहीं जा सकता. हम 2013 से FIDO एलायंस के साथ काम कर रहे हैं और हाल ही में, हम W3C के साथ फ़िशिंग से बचने वाला स्टैंडर्ड प्रोटोकॉल लागू करने के लिए काम कर रहे हैं. इस प्रोटोकॉल का इस्तेमाल कोई भी वेब ऐप्लिकेशन कर सकता है.

WebAuthn क्या है?

वेब की पुष्टि करने वाला एपीआई, पुष्टि करने वाले लोगों को वेब ऐप्लिकेशन के उपयोगकर्ता एजेंट के मीडिएशन का ऐक्सेस देता है – ये आम तौर पर यूएसबी/BLE/एनएफ़सी या प्लैटफ़ॉर्म में सीधे तौर पर बने मॉड्यूल से ऐक्सेस किए जाने वाले हार्डवेयर टोकन होते हैं. इनका मकसद, ऐप्लिकेशन के दायरे वाले (eTLD+k) के सार्वजनिक क्रेडेंशियल जनरेट करने और उन्हें चुनौती देने के मकसद से बनाया जाता है. इसकी मदद से, कई तरह के कामों को किया जा सकता है, जैसे:

  • कम सुरक्षा और फ़िशिंग से बचने की क्षमता वाला 2FA (इसका इस्तेमाल पासवर्ड के साथ किया जाना चाहिए).
  • बिना पासवर्ड के, बायोमेट्रिक्स के आधार पर फिर से अनुमति देने की सुविधा.
  • कम सुविधाओं वाला 2FA बिना पासवर्ड और फ़िशिंग से बचने की क्षमता वाला 2FA (बिना पासवर्ड वाले खातों के लिए इस्तेमाल किया जा सकता है).

इस एपीआई को ज़्यादातर ज़्यादातर ब्राउज़र पर लागू किया जा सकता है. इसका मकसद, ऑनलाइन प्लैटफ़ॉर्म पर अपनी पहचान साबित करने और फ़िशिंग को काफ़ी कम करने के दौरान मिलने वाले यूज़र इंटरफ़ेस (यूआई) को आसान बनाना है.

WebAuthn, क्रेडेंशियल मैनेजमेंट एपीआई का दायरा बढ़ा देता है और PublicKeyCredential नाम का एक नया क्रेडेंशियल टाइप जोड़ता है. WebAuthn, ब्राउज़र और Authenticator के बीच कम्यूनिकेशन को एब्सट्रैक्ट करता है. इससे उपयोगकर्ता, ये काम कर सकता है:

  1. किसी वेबसाइट के लिए, सार्वजनिक पासकोड का क्रेडेंशियल बनाना और उसे रजिस्टर करना.
  2. संबंधित निजी कुंजी के मालिकाना हक को साबित करके, किसी वेबसाइट की पुष्टि करें.

Authenticator ऐसे डिवाइस होते हैं जो निजी/सार्वजनिक कुंजी के जोड़े जनरेट कर सकते हैं और सहमति इकट्ठा कर सकते हैं. हस्ताक्षर करने के लिए, सिर्फ़ एक टैप करके, फ़िंगरप्रिंट से पढ़े जाने या किसी अन्य तरीके से साइन इन करने की सहमति दी जा सकती है. इसके लिए, उन तरीकों का इस्तेमाल किया जा सकता है जो FIDO2 की ज़रूरी शर्तों का पालन करते हों. FIDO2 की ओर से पुष्टि करने वाले लोगों के लिए, सर्टिफ़िकेशन प्रोग्राम उपलब्ध है. Authenticator, या तो प्लैटफ़ॉर्म (जैसे कि स्मार्टफ़ोन पर मौजूद फ़िंगरप्रिंट स्कैनर) में पहले से मौजूद हो सकता है या यूएसबी, ब्लूटूथ लो एनर्जी (BLE) या नियर-फ़ील्ड कम्यूनिकेशन (एनएफ़सी) की मदद से अटैच किया जा सकता है.

यह सुविधा कैसे काम करती है

कुंजी का जोड़ा बनाना और उपयोगकर्ता को रजिस्टर करना

जब कोई उपयोगकर्ता किसी वेबसाइट पर क्रेडेंशियल रजिस्टर करना चाहता है (WebAuthn ने इसे "भरोसेमंद पक्ष" के तौर पर बताया है):

  1. भरोसा करने वाला पक्ष एक चैलेंज जनरेट करता है.
  2. भरोसेमंद पक्ष, क्रेडेंशियल मैनेजर एपीआई के ज़रिए ब्राउज़र से, भरोसा करने वाले पक्ष के लिए नया क्रेडेंशियल जनरेट करने के लिए कहता है. इसमें, डिवाइस की क्षमता की जानकारी देनी होती है. उदाहरण के लिए, डिवाइस खुद उपयोगकर्ता की पुष्टि करने की सुविधा (बायोमेट्रिक्स वगैरह) देता है या नहीं.
  3. पुष्टि करने वाला व्यक्ति, जब उपयोगकर्ता की सहमति ले लेता है, तो वह एक कुंजी का जोड़ा जनरेट करता है. इसके बाद, वह वेबसाइट पर सार्वजनिक पासकोड और हस्ताक्षर किए गए वैकल्पिक पुष्टि वाले दस्तावेज़ दिखाता है.
  4. वेब ऐप्लिकेशन, सार्वजनिक कुंजी को सर्वर पर फ़ॉरवर्ड करता है.
  5. सर्वर, उपयोगकर्ता की पहचान के साथ सार्वजनिक कुंजी सेव करता है, ताकि आने वाले समय में पुष्टि करने के लिए क्रेडेंशियल याद रखा जा सके.
let credential = await navigator.credentials.create({ publicKey: {
  challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
  rp: { id: "acme.com", name: "ACME Corporation" },
  user: {
    id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
    name: "jamiedoe",
    displayName: "Jamie Doe"
  },
  pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});

किसी उपयोगकर्ता की पुष्टि करना

जब किसी वेबसाइट को इस बात का सबूत चाहिए कि वह सही उपयोगकर्ता के साथ इंटरैक्ट कर रही है, तो:

  1. भरोसेमंद पक्ष एक चैलेंज जनरेट करता है और ब्राउज़र को उपयोगकर्ता के लिए रजिस्टर किए गए क्रेडेंशियल की सूची देता है. इससे यह भी पता चल सकता है कि क्रेडेंशियल कहां देखना है. उदाहरण के लिए, पहले से मौजूद डिवाइस पर मौजूद Authenticator पर या यूएसबी, BLE वगैरह पर.
  2. ब्राउज़र, पुष्टि करने वाले से चैलेंज पर हस्ताक्षर करने के लिए कहता है.
  3. अगर पुष्टि करने वाले में कोई क्रेडेंशियल मौजूद है, तो उपयोगकर्ता की सहमति मिलने के बाद वह वेब ऐप्लिकेशन पर, हस्ताक्षर किया गया दावा दिखाता है.
  4. वेब ऐप्लिकेशन, हस्ताक्षर किए गए दावे को सर्वर पर भेज देता है, ताकि उस पक्ष की पुष्टि की जा सके.
  5. सर्वर से पुष्टि होने के बाद, पुष्टि करने की प्रोसेस को सफल माना जाता है.
let credential = await navigator.credentials.get({ publicKey: {
  challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
  rpId: "acme.com",
  allowCredentials: [{
    type: "public-key",
    id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
  }],
  userVerification: "required",
}});

https://webauthndemo.appspot.com/ पर जाकर, WebAuthn आज़माएं.

आगे क्या है?

Chrome 67 का बीटा वर्शन, navigator.credentials.get({publicKey: ...}) और navigator.credentials.create({publicKey:... }) के साथ काम करता है. यह डेस्कटॉप पर यूएसबी ट्रांसपोर्ट पर, U2F/CTAP 1 की पुष्टि करने वाले टूल का इस्तेमाल करने की सुविधा देता है.

आने वाली रिलीज़ में, BLE और एनएफ़सी जैसे और ज़्यादा ट्रांसपोर्ट के लिए सहायता उपलब्ध कराई जाएगी. साथ ही, नया सीटीए 2 वायर प्रोटोकॉल भी जोड़ा जाएगा. इसके अलावा, हम CTAP 2 और WebAuthn के साथ काम करने वाले बेहतर फ़्लो पर भी काम कर रहे हैं. जैसे, पिन से सुरक्षित किए गए पुष्टि करने वाले टूल, खाता चुनने के बजाय (उपयोगकर्ता नाम या पासवर्ड टाइप करने के बजाय), और फ़िंगरप्रिंट रजिस्ट्रेशन.

ध्यान दें कि Microsoft Edge, एपीआई के साथ भी काम करता है और Firefox, Firefox 60 में WebAuthn के साथ काम करता है.

रिसॉर्स

हम ज़्यादा जानकारी वाले दस्तावेज़ पर काम कर रहे हैं:

Google I/O 2018 में शामिल WebAuthn सेशन में, "वेब पर साइन अप और साइन इन करने में नया क्या है" सेशन.