पूरी डिस्क को एन्क्रिप्ट (सुरक्षित) करने की सुविधा

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

पूरी डिस्क को एन्क्रिप्ट (सुरक्षित) करने का तरीका, किसी Android डिवाइस पर उपयोगकर्ता के पूरे डेटा को कोड में बदलने की प्रोसेस है. एन्क्रिप्ट की गई कुंजी है. डिवाइस के एन्क्रिप्ट हो जाने के बाद, उपयोगकर्ता का बनाया गया पूरा डेटा डेटा को डिस्क और सभी रीड पर लागू करने से पहले, अपने-आप एन्क्रिप्ट (सुरक्षित) हो जाता है डेटा को वापस लाने से पहले उसे अपने-आप डिक्रिप्ट कर सकता है.

Android के 4.4 वर्शन में फ़ुल-डिस्क एन्क्रिप्शन की सुविधा शुरू की गई थी, लेकिन Android 5.0 ये नई सुविधाएं:

  • डेटा को एन्क्रिप्ट करने का तेज़ तरीका इस्तेमाल किया गया. इसकी मदद से, सिर्फ़ डेटा पार्टिशन में इस्तेमाल किए गए ब्लॉक को एन्क्रिप्ट (सुरक्षित) किया जा सकता है ऐसा करना इसलिए ज़रूरी है, ताकि पहली बार बूट होने में ज़्यादा समय लगे. सिर्फ़ ext4 और f2fs फ़ाइल सिस्टम जो अभी तेज़ एन्क्रिप्शन का समर्थन करती है.
  • forceencrypt जोड़ा गया fstab फ़्लैग का इस्तेमाल करें.
  • पासवर्ड के बिना पैटर्न और एन्क्रिप्शन के लिए अतिरिक्त सुविधा जोड़ी गई.
  • भरोसेमंद ऐप्लिकेशन का इस्तेमाल करके, एन्क्रिप्ट (सुरक्षित) करने की कुंजी के लिए, हार्डवेयर बैक अप वाला स्टोरेज जोड़ा गया एक्ज़ीक्यूशन एनवायरमेंट (टीईई) की हस्ताक्षर करने की क्षमता (जैसे कि TrustZone में). ज़्यादा जानकारी के लिए, एन्क्रिप्ट की गई कुंजी को स्टोर करना लेख पढ़ें विवरण.

चेतावनी: Android 5.0 और इसके बाद के वर्शन वाले डिवाइसों पर अपग्रेड करें एन्क्रिप्ट (सुरक्षित) की गई सुविधा को फिर से फ़ैक्ट्री डेटा रीसेट करके, एन्क्रिप्ट (सुरक्षित) न की गई स्थिति में वापस लाया जा सकता है. नया Android 5.0 पहली बार बूट किए गए डिवाइस को एन्क्रिप्ट नहीं की गई स्थिति में वापस नहीं किया जा सकता.

Android की पूरी डिस्क को एन्क्रिप्ट (सुरक्षित) करने की सुविधा कैसे काम करती है

Android की पूरी डिस्क को एन्क्रिप्ट (सुरक्षित) करने की सुविधा, dm-crypt पर आधारित है, जो एक कर्नेल है 'डिवाइस ब्लॉक करें लेयर' पर काम करने वाली सुविधा है. इस वजह से इसका मतलब है कि एन्क्रिप्ट (सुरक्षित) करने की सुविधा, एम्बेड किए गए मल्टीमीडिया कार्ड (eMMC) के साथ काम करती है और ऐसे मिलते-जुलते फ़्लैश डिवाइस जो खुद को कर्नेल के सामने ब्लॉक के रूप में पेश करते हैं डिवाइस. YAFFS के साथ एन्क्रिप्ट (सुरक्षित) नहीं किया जा सकता, जो सीधे रॉ से बात करता है NAND फ़्लैश चिप.

एन्क्रिप्शन का एल्गोरिदम 128 ऐडवांस्ड एन्क्रिप्शन स्टैंडर्ड (AES) है साइफ़र-ब्लॉक चेनिंग (CBC) और ESSIV:SHA256. मास्टर कुंजी को इसके साथ एन्क्रिप्ट किया गया है: OpenGL लाइब्रेरी पर कॉल के ज़रिए 128-बिट AES. इसके लिए आपको 128 या उससे ज़्यादा बिट का इस्तेमाल करना होगा कुंजी (जिसमें 256 वैकल्पिक है).

ध्यान दें: मास्टर कुंजी को एन्क्रिप्ट करने के लिए, OEM 128-बिट या उसके बाद के वर्शन का इस्तेमाल कर सकते हैं.

Android 5.0 रिलीज़ में, चार प्रकार की एन्क्रिप्शन स्थितियां होती हैं:

  • डिफ़ॉल्ट
  • पिन
  • पासवर्ड
  • पैटर्न

पहली बार बूट करने पर, डिवाइस बिना किसी क्रम के जनरेट की गई 128-बिट वाली मास्टर कुंजी बनाता है और फिर उसे एक डिफ़ॉल्ट पासवर्ड और स्टोर किए गए सॉल्ट के साथ हैश किया जाता है. इसका डिफ़ॉल्ट पासवर्ड यह है: "default_password" हालांकि, इसके बाद मिले हैश को TEE (जैसे कि TrustZone) की मदद से भी साइन किया जाता है. जो मास्टर कुंजी को एन्क्रिप्ट करने के लिए हस्ताक्षर के हैश का उपयोग करता है.

आप Android ओपन सोर्स प्रोजेक्ट cryptfs.cpp में बताए गए डिफ़ॉल्ट पासवर्ड को ढूंढ सकते हैं फ़ाइल से लिए जाते हैं.

जब उपयोगकर्ता डिवाइस पर पिन/पास या पासवर्ड सेट करता है, तो सिर्फ़ 128-बिट कुंजी को फिर से एन्क्रिप्ट (सुरक्षित) किया जाता है और सेव किया जाता है. (यानी उपयोगकर्ता के पिन/पास/पैटर्न में बदलाव करने की वजह से उपयोगकर्ता के डेटा को फिर से एन्क्रिप्ट (सुरक्षित) करना.) ध्यान दें कि मैनेज किया जा रहा डिवाइस पिन, पैटर्न या पासवर्ड की पाबंदियों के दायरे में आ सकते हैं.

एन्क्रिप्ट (सुरक्षित) करने की सुविधा को init और vold मैनेज करते हैं. init, vold को कॉल करता है और vold, ट्रिगर करने के लिए प्रॉपर्टी सेट करता है init. सिस्टम के अन्य हिस्से प्रॉपर्टी को देखकर, रिपोर्ट की स्थिति जैसे टास्क करें. इसके अलावा, पासवर्ड या गंभीर गड़बड़ी की स्थिति में फैक्ट्री रीसेट का प्रॉम्प्ट. शुरू करने के लिए vold में एन्क्रिप्शन की सुविधा देता है, तो यह सिस्टम कमांड-लाइन टूल का इस्तेमाल करता है vdc के cryptfs निर्देश: checkpw, restart, enablecrypto, changepw, cryptocomplete, verifypw, setfield, getfield, mountdefaultencrypted, getpwtype, getpw और clearpw.

/data, /data को एन्क्रिप्ट, डिक्रिप्ट या वाइप करने के लिए माउंट नहीं किया जाना चाहिए. हालांकि, किसी भी यूज़र इंटरफ़ेस (यूआई) को दिखाने के लिए, फ़्रेमवर्क शुरू होना चाहिए और फ़्रेमवर्क को चलाने के लिए /data की ज़रूरत होती है. यहां की यात्रा पर हूं इस समस्या को हल करें, एक अस्थायी फ़ाइलसिस्टम /data पर माउंट किया गया है. इससे Android, पासवर्ड का प्रॉम्प्ट दे सकता है, प्रोग्रेस दिखा सकता है या डेटा का सुझाव दे सकता है वाइप करें. यह वह सीमा लागू करता है जो वेब ब्राउज़र से स्विच करने के लिए अस्थायी फ़ाइलसिस्टम को सही /data फ़ाइल सिस्टम से जोड़ना है, तो सिस्टम को अस्थायी फ़ाइल सिस्टम पर खुली फ़ाइलों वाली सभी प्रोसेस को बंद करें और उन्हें फिर से चालू करें असली /data फ़ाइल सिस्टम पर प्रोसेस होती हैं. ऐसा करने के लिए, सभी सेवाएं तीन ग्रुप में से किसी एक में होना चाहिए: core, main, और late_start.

  • core: शुरू होने के बाद कभी शट डाउन न करें.
  • main: शट डाउन करें और डिस्क का पासवर्ड डालने के बाद रीस्टार्ट करें.
  • late_start: शुरू तब तक नहीं होगा, जब तक /data को डिक्रिप्ट और माउंट नहीं किया जाता.

इन कार्रवाइयों को ट्रिगर करने के लिए, vold.decrypt प्रॉपर्टी को इस पर सेट किया गया है अलग-अलग स्ट्रिंग. सेवाओं को बंद करने और रीस्टार्ट करने के लिए, init निर्देश ये हैं:

  • class_reset: किसी सेवा को रोकता है, लेकिन उसे class_start के साथ रीस्टार्ट करने की अनुमति देता है.
  • class_start: सेवा को रीस्टार्ट करता है.
  • class_stop: किसी सेवा को बंद करता है और SVC_DISABLED फ़्लैग जोड़ता है. जो सेवाएं रोकी गई हैं वे class_start का जवाब नहीं देती हैं.

फ़्लो

एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस के चार फ़्लो होते हैं. डिवाइस को सिर्फ़ एक बार एन्क्रिप्ट (सुरक्षित) किया गया है और फिर सामान्य तरीके से बूट होता है.

  • पहले एन्क्रिप्ट (सुरक्षित) नहीं किए गए डिवाइस को एन्क्रिप्ट (सुरक्षित) करना:
    • forceencrypt की मदद से नए डिवाइस को एन्क्रिप्ट (सुरक्षित) करें: ज़रूरी है पहले बूट पर (Android L में शुरू हो रहा है).
    • मौजूदा डिवाइस को एन्क्रिप्ट करें: उपयोगकर्ता की ओर से शुरू किया गया एन्क्रिप्शन (Android K और उससे पहले के वर्शन).
  • एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को चालू करें:
    • बिना पासवर्ड के एन्क्रिप्ट किया गया डिवाइस चालू करना: एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को चालू करना कोई पासवर्ड सेट न किया गया हो (यह Android 5.0 और उसके बाद के वर्शन पर चलने वाले डिवाइस के लिए काम का है).
    • एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को पासवर्ड से चालू करना: एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को चालू करना का पासवर्ड सेट है.

इन फ़्लो के अलावा, हो सकता है कि डिवाइस /data को एन्क्रिप्ट (सुरक्षित) न कर पाए. हर फ़्लो के बारे में नीचे ज़्यादा जानकारी दी गई है.

Salesforce की मदद से नए डिवाइस को एन्क्रिप्ट (सुरक्षित) करें

यह किसी Android 5.0 डिवाइस का पहला बूट होता है.

  1. forceencrypt फ़्लैग की मदद से, एन्क्रिप्ट (सुरक्षित) नहीं किए गए फ़ाइल सिस्टम का पता लगाएं

    /data को एन्क्रिप्ट (सुरक्षित) नहीं किया गया है, क्योंकि forceencrypt के लिए यह ज़रूरी है. /data को अलग करें.

  2. /data को एन्क्रिप्ट (सुरक्षित) करना शुरू करें

    vold.decrypt = "trigger_encryption" ने init.rc को ट्रिगर किया, जिसकी वजह से vold, /data को बिना पासवर्ड के एन्क्रिप्ट (सुरक्षित) कर देगा. (कोई भी सेट नहीं है क्योंकि यह एक नया डिवाइस होना चाहिए.)

  3. माउंट टीएमपीएफ़एस

    vold, tmpfs /data को माउंट करता है (इसके लिए tmpfs विकल्पों का इस्तेमाल करता है ro.crypto.tmpfs_options) प्रॉपर्टी को vold.encrypt_progress प्रॉपर्टी के तौर पर 0 पर सेट किया जाता है. vold, एन्क्रिप्ट (सुरक्षित) किए गए सिस्टम को चालू करने के लिए, tmpfs /data को तैयार करता है और प्रॉपर्टी vold.decrypt इससे: trigger_restart_min_framework

  4. प्रोग्रेस दिखाने के लिए फ़्रेमवर्क तैयार करना

    डिवाइस में एन्क्रिप्ट (सुरक्षित) करने के लिए कोई डेटा मौजूद नहीं है. इसलिए, प्रोग्रेस बार वे अक्सर नहीं दिखते, क्योंकि एन्क्रिप्शन बहुत तेज़ी से हो जाता है. यहां जाएं: ज़्यादा जानकारी के लिए, मौजूदा डिवाइस को एन्क्रिप्ट (सुरक्षित) करें प्रोग्रेस यूज़र इंटरफ़ेस (यूआई) की जानकारी.

  5. /data के एन्क्रिप्ट (सुरक्षित) होने पर, फ़्रेमवर्क को हटा दें

    vold, vold.decrypt को इस पर सेट करता है trigger_default_encryption जो defaultcrypto सेवा. (इससे, किसी प्रॉडक्ट को माउंट करने के लिए नीचे दिया गया फ़्लो शुरू होता है उपयोगकर्ता का डिफ़ॉल्ट एन्क्रिप्टेड डेटा.) trigger_default_encryption एन्क्रिप्ट (सुरक्षित) करने का तरीका, ताकि यह देखा जा सके कि /data को पासवर्ड डालें. Android 5.0 डिवाइस को पहली बार बूट करने पर एन्क्रिप्ट (सुरक्षित) किया जाता है, इसलिए ऐसा होना चाहिए पासवर्ड सेट न हो; इसलिए, हम /data को डिक्रिप्ट और डिक्रिप्ट करते हैं.

  6. माउंट /data

    इसके बाद, init इसका इस्तेमाल करके /data को tmpfs रैम डिस्क पर माउंट करता है पैरामीटर, जिसे यह ro.crypto.tmpfs_options से चुनता है, जो कि एक बार सेट है init.rc में.

  7. शुरुआती फ़्रेमवर्क

    vold, vold.decrypt को इस पर सेट करता है trigger_restart_framework, जो सामान्य तरीके से चालू रहता है प्रोसेस.

मौजूदा डिवाइस एन्क्रिप्ट (सुरक्षित) करें

ऐसा तब होता है, जब एन्क्रिप्ट (सुरक्षित) नहीं किए गए Android K या इससे पहले के वर्शन को एन्क्रिप्ट (सुरक्षित) किया जाता है L पर माइग्रेट किया गया डिवाइस.

यह प्रोसेस उपयोगकर्ता की ओर से शुरू की जाती है. इसे कोड डालें. जब कोई उपयोगकर्ता किसी डिवाइस को एन्क्रिप्ट करने का विकल्प चुनता है, तो यूज़र इंटरफ़ेस (यूआई) यह पक्का करता है कि बैटरी पूरी तरह चार्ज है और AC अडैप्टर को प्लग-इन किया गया है, ताकि हम एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस को पूरा करते हैं.

चेतावनी: अगर डिवाइस की बैटरी खत्म हो जाती है और काम पूरा होने से पहले ही बंद हो जाता है एन्क्रिप्ट करने के दौरान, फ़ाइल का डेटा कुछ हद तक एन्क्रिप्ट यानी सुरक्षित किया जाता है. डिवाइस को फ़ैक्ट्री रीसेट करने से आपका पूरा डेटा मिट जाएगा.

जगह की जानकारी को एन्क्रिप्ट (सुरक्षित) करने की सुविधा चालू करने के लिए, vold एक लूप शुरू करता है, ताकि हर टेक्स्ट को पढ़ा जा सके रीयल ब्लॉक डिवाइस का सेक्टर चुनें और फिर इसे लिखें क्रिप्टो ब्लॉक डिवाइस तक. vold यह देखने के लिए जांच करता है कि कोई सेक्टर यहां है या नहीं पढ़ने और लिखने से पहले इस्तेमाल करें, जिससे ज़्यादा तेज़ी से एन्क्रिप्ट करने की सुविधा मिलती है.

डिवाइस की स्थिति: ro.crypto.state = "unencrypted" सेट करें और चालू करने के लिए on nonencrypted init ट्रिगर को एक्ज़ीक्यूट करें.

  1. पासवर्ड की जांच करें

    यूज़र इंटरफ़ेस (यूआई), vold को cryptfs enablecrypto inplace निर्देश के साथ कॉल करता है जहां passwd, उपयोगकर्ता का लॉक स्क्रीन पासवर्ड है.

  2. फ़्रेमवर्क को हटाना

    vold, गड़बड़ियों का पता लगाता है और एन्क्रिप्ट (सुरक्षित) नहीं कर पाने पर, -1 दिखाता है. लॉग में किसी कारण को प्रिंट करता है. अगर यह एन्क्रिप्ट (सुरक्षित) कर सकता है, तो प्रॉपर्टी vold.decrypt को सेट कर देगा trigger_shutdown_framework तक. इसकी वजह से init.rc late_start और main क्लास में सेवाओं को रोक देती है.

  3. क्रिप्टो फ़ुटर बनाना
  4. ब्रेडक्रंब फ़ाइल बनाना
  5. फिर से चालू करें
  6. ब्रेडक्रंब फ़ाइल का पता लगाना
  7. /data को एन्क्रिप्ट (सुरक्षित) करना शुरू करें

    इसके बाद, vold क्रिप्टो मैपिंग सेट अप करता है, जिससे एक वर्चुअल क्रिप्टो ब्लॉक डिवाइस बनता है जो रीयल ब्लॉक डिवाइस पर मैप होती है, लेकिन हर सेक्टर के लिखे जाने के हिसाब से उसे एन्क्रिप्ट कर देती है, और पढ़े जाने के हिसाब से हर सेक्टर को डिक्रिप्ट करता है. इसके बाद vold, कॉन्टेंट बनाता और लिखता है क्रिप्टो मेटाडेटा हटा दें.

  8. एन्क्रिप्ट करने के दौरान, tmpfs को माउंट करें

    vold, tmpfs के विकल्पों का इस्तेमाल करके /data को माउंट करता है ro.crypto.tmpfs_options से) और प्रॉपर्टी सेट करता है vold.encrypt_progress से 0 तक. vold tmpf तैयार करता है एन्क्रिप्ट किए गए सिस्टम को चालू करने और प्रॉपर्टी को सेट करने के लिए /data vold.decrypt से: trigger_restart_min_framework

  9. प्रोग्रेस दिखाने के लिए फ़्रेमवर्क तैयार करना

    trigger_restart_min_framework के कारण init.rc की वजह से main सेवाओं की श्रेणी शुरू करें. जब फ़्रेमवर्क देखता है कि vold.encrypt_progress को 0 पर सेट किया गया है. इससे प्रोग्रेस बार दिखेगा यूज़र इंटरफ़ेस (यूआई), जो हर पांच सेकंड में उस प्रॉपर्टी के लिए क्वेरी करता है और एक प्रोग्रेस बार को अपडेट करता है. हर बार vold.encrypt_progress अपडेट होने पर, एन्क्रिप्ट (सुरक्षित) करने का लूप अपडेट हो जाता है विभाजन के दूसरे प्रतिशत को एन्क्रिप्ट करता है.

  10. /data को एन्क्रिप्ट (सुरक्षित) करने के बाद, क्रिप्टो फ़ुटर अपडेट करें

    जब /data को एन्क्रिप्ट (सुरक्षित) किया जाता है, तो vold फ़ाइलें हटा देता है मेटाडेटा में फ़्लैग ENCRYPTION_IN_PROGRESS.

    डिवाइस के अनलॉक होने पर, पासवर्ड का इस्तेमाल इन कामों के लिए किया जाता है मास्टर कुंजी को एन्क्रिप्ट करें और क्रिप्टो फ़ुटर अपडेट हो जाता है.

    अगर किसी वजह से डिवाइस फिर से चालू नहीं हो पाता है, तो vold प्रॉपर्टी को सेट करता है vold.encrypt_progress से error_reboot_failed और यूज़र इंटरफ़ेस (यूआई) में एक मैसेज दिखना चाहिए. इस मैसेज में, उपयोगकर्ता से डिवाइस को फिर से चालू करें. ऐसा कभी होने की उम्मीद नहीं है.

एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को डिफ़ॉल्ट एन्क्रिप्शन के साथ चालू करना

ऐसा तब होता है, जब एन्क्रिप्ट किए गए किसी डिवाइस को बिना पासवर्ड के चालू किया जाता है. Android 5.0 डिवाइस को पहली बार चालू करने पर एन्क्रिप्ट (सुरक्षित) किया जाता है. इसलिए, कोई सेटिंग सेट नहीं की जानी चाहिए पासवर्ड है और इसलिए यह डिफ़ॉल्ट एन्क्रिप्शन स्थिति है.

  1. बिना पासवर्ड के एन्क्रिप्ट (सुरक्षित) किए गए /data का पता लगाएं

    पता करें कि Android डिवाइस को एन्क्रिप्ट (सुरक्षित) किया गया है, क्योंकि /data किसी एक फ़्लैग को माउंट नहीं किया जा सकताencryptable या forceencrypt सेट है.

    vold, vold.decrypt को इस पर सेट करता है trigger_default_encryption, जो defaultcrypto सेवा. trigger_default_encryption अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है एन्क्रिप्शन के टाइप की जांच करके पता लगाता है कि /data को बिना पासवर्ड के साइन इन करें.

  2. डेटा को डिक्रिप्ट करना

    ब्लॉक डिवाइस पर dm-crypt डिवाइस बनाता है, ताकि डिवाइस इस्तेमाल के लिए तैयार है.

  3. माउंट /डेटा

    इसके बाद, vold, डिक्रिप्ट किए गए असली /data पार्टीशन को माउंट करेगा और फिर नया सेगमेंट तैयार करता है. यह प्रॉपर्टी को सेट करता है vold.post_fs_data_done को 0 पर सेट करने के बाद, vold.decrypt को सेट किया जाता है trigger_post_fs_data के लिए. इससे init.rc चलता है इसके post-fs-data निर्देश. वे कोई भी ज़रूरी डायरेक्ट्री बनाएंगे या लिंक जोड़ें और फिर vold.post_fs_data_done को 1 पर सेट करें.

    जब vold को उस प्रॉपर्टी में 1 दिखेगा, तब प्रॉपर्टी सेट हो जाएगी vold.decrypt इससे: trigger_restart_framework. इस init.rc के कारण main क्लास में सेवाएं शुरू हो रही हैं साथ ही, क्लास late_start में अपनी सेवाएं फिर से शुरू करें बूट के बाद से समय.

  4. शुरुआती फ़्रेमवर्क

    अब फ़्रेमवर्क, डिक्रिप्ट किए गए /data का इस्तेमाल करके अपनी सभी सेवाओं को चालू करता है. और सिस्टम इस्तेमाल के लिए तैयार है.

एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को एन्क्रिप्ट (सुरक्षित) करने के डिफ़ॉल्ट तरीके के बिना चालू करना

ऐसा तब होता है, जब आप ऐसे एन्क्रिप्ट किए गए डिवाइस को चालू करते हैं जिसमें पासवर्ड डालें. डिवाइस का पासवर्ड कोई पिन, पैटर्न या पासवर्ड हो सकता है.

  1. एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस का पासवर्ड से पता लगाना

    पता लगाएं कि Android डिवाइस को एनक्रिप्ट (सुरक्षित) किया गया है, क्योंकि ro.crypto.state = "encrypted" अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

    vold, vold.decrypt को इस पर सेट करता है trigger_restart_min_framework क्योंकि /data है से एन्क्रिप्ट (सुरक्षित) किया जाता है.

  2. माउंट टीएमपीएफ़एस

    init, माउंट करने के शुरुआती विकल्पों को सेव करने के लिए, पांच प्रॉपर्टी सेट करता है init.rc से पास किए गए पैरामीटर के साथ, /data के लिए दिया गया. vold क्रिप्टो मैपिंग सेट अप करने के लिए इन प्रॉपर्टी का इस्तेमाल करता है:

    1. ro.crypto.fs_type
    2. ro.crypto.fs_real_blkdev
    3. ro.crypto.fs_mnt_point
    4. ro.crypto.fs_options
    5. ro.crypto.fs_flags (ASCII का आठ अंकों का हेक्स नंबर, जिसके पहले 0x होता है)
  3. पासवर्ड के प्रॉम्प्ट के लिए फ़्रेमवर्क शुरू करें

    फ़्रेमवर्क शुरू हो जाता है और पता चलता है कि vold.decrypt इस पर सेट है trigger_restart_min_framework. इससे फ़्रेमवर्क को यह पता चलता है कि tmpfs /data डिस्क पर चालू होता है और इसके लिए उपयोगकर्ता पासवर्ड की ज़रूरत होती है.

    हालांकि, सबसे पहले यह पक्का करना होगा कि डिस्क सही तरीके से एन्क्रिप्ट (सुरक्षित) की गई है. यह vold को cryptfs cryptocomplete निर्देश भेजता है. अगर एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस पूरी हो गई है, तो vold 0 दिखाता है, अंदरूनी गड़बड़ी होने पर -1 दिखाता है या -2 अगर एन्क्रिप्ट (सुरक्षित) नहीं किया गया. vold तय करता है यह CRYPTO_ENCRYPTION_IN_PROGRESS के लिए क्रिप्टो मेटाडेटा में जाकर देखा जा सकता है फ़्लैग करें. अगर यह सेट है, तो एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस में रुकावट आई थी और को डिवाइस में इस्तेमाल किया जा सकता है. अगर vold गड़बड़ी का मैसेज दिखाता है, तो यूज़र इंटरफ़ेस (यूआई) को डिवाइस को फिर से चालू करने और फ़ैक्ट्री रीसेट करने का मैसेज उपयोगकर्ता को दिखा सकता है. साथ ही, क्लिक करने के लिए बटन दबाएं.

  4. पासवर्ड का इस्तेमाल करके डेटा डिक्रिप्ट करना

    cryptfs cryptocomplete के पूरा होने के बाद, फ़्रेमवर्क एक यूज़र इंटरफ़ेस (यूआई) दिखाता है, जिसमें डिस्क का पासवर्ड मांगा जाता है. यूज़र इंटरफ़ेस (यूआई) इसके हिसाब से पासवर्ड की जांच करता है vold को cryptfs checkpw निर्देश भेज रही हूँ. अगर पासवर्ड सही है (जिसका पता लगाने के लिए /data को किसी अस्थायी जगह पर डिक्रिप्ट किया गया, फिर अलग किया गया), vold, प्रॉपर्टी में डिक्रिप्ट किए गए ब्लॉक डिवाइस का नाम सेव करता है ro.crypto.fs_crypto_blkdev और यूज़र इंटरफ़ेस (यूआई) पर स्थिति 0 दिखाता है. अगर पासवर्ड गलत है, तो यह यूज़र इंटरफ़ेस (यूआई) में -1 दिखाता है.

  5. फ़्रेमवर्क बंद करना

    यूज़र इंटरफ़ेस (यूआई) में क्रिप्टो बूट है ग्राफ़िक दिखता है और फिर वह vold को कॉल करता है निर्देश cryptfs restart. vold प्रॉपर्टी सेट करता है vold.decrypt से trigger_reset_main तक, जिसकी वजह से class_reset main कार्रवाई करने के लिए init.rc. इससे सभी सेवाएं बंद हो जाएंगी मुख्य क्लास में शामिल होती है, जिससे tmpfs /data को अलग किया जा सकता है.

  6. माउंट /data

    इसके बाद, vold, डिक्रिप्ट किए गए असली /data पार्टीशन को माउंट करेगा और नया विभाजन तैयार करता है (जो शायद कभी तैयार नहीं हुआ इसे वाइप करने के विकल्प की मदद से एन्क्रिप्ट (सुरक्षित) किया गया था. यह पहले काम नहीं करता रिलीज़ करें). यह vold.post_fs_data_done प्रॉपर्टी को 0 पर सेट करता है और vold.decrypt को trigger_post_fs_data पर सेट करता है. इसकी वजह से post-fs-data कमांड चलाने के लिए init.rc. वे सभी ज़रूरी डायरेक्ट्री या लिंक बनाएं और फिर सेट vold.post_fs_data_done से 1. जब vold को 1 दिखे उस प्रॉपर्टी का इस्तेमाल किया जाता है, तो यह प्रॉपर्टी vold.decrypt को trigger_restart_framework. इससे init.rc शुरू होता है main कैटगरी में फिर से अपनी सेवाएं पाएं. साथ ही, क्लास में अपनी सेवाएं शुरू करें बूट होने के बाद पहली बार late_start.

  7. पूरा फ़्रेमवर्क शुरू करें

    अब फ़्रेमवर्क, डिक्रिप्ट किए गए /data का इस्तेमाल करके अपनी सभी सेवाओं को चालू करता है फ़ाइल सिस्टम में सेव किया जाता है और सिस्टम इस्तेमाल के लिए तैयार है.

कार्रवाई सफल नहीं हुई

अगर कोई डिवाइस डिक्रिप्ट नहीं कर पाता है, तो उसके पीछे कुछ वजहें हो सकती हैं. डिवाइस इसे बूट करने के चरणों की सामान्य सीरीज़ से शुरू होता है:

  1. एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को पासवर्ड से पहचानें
  2. माउंट tmpfs
  3. पासवर्ड के प्रॉम्प्ट के लिए फ़्रेमवर्क शुरू करें

हालांकि, फ़्रेमवर्क खुलने के बाद डिवाइस में कुछ गड़बड़ियां हो सकती हैं:

  • पासवर्ड मेल खाता है, लेकिन डेटा डिक्रिप्ट नहीं कर सकता
  • उपयोगकर्ता 30 बार गलत पासवर्ड डालता है

अगर ये गड़बड़ियां ठीक नहीं होती हैं, तो उपयोगकर्ता को फ़ैक्ट्री वाइप करने का अनुरोध करें:

अगर एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस के दौरान vold को किसी गड़बड़ी का पता चलता है अभी तक कोई डेटा खत्म नहीं हुआ है और फ़्रेमवर्क बना हुआ है, vold सेट प्रॉपर्टी vold.encrypt_progress से error_not_encrypted के लिए. यूज़र इंटरफ़ेस (यूआई) की इमेज, जिसमें उपयोगकर्ता को फिर से चालू करने का निर्देश दिया गया है. साथ ही, उन्हें एन्क्रिप्ट (सुरक्षित) करने के तरीके के बारे में सूचना दी गई है शुरू नहीं किया. अगर फ़्रेमवर्क टूट जाने के बाद गड़बड़ी होती है, लेकिन प्रोग्रेस बार यूज़र इंटरफ़ेस (यूआई) चालू होने से पहले, vold सिस्टम को फिर से चालू कर देगा. अगर आपने फिर से चालू नहीं हो पाता है, तो यह vold.encrypt_progress को error_shutting_down और रिटर्न -1; लेकिन उन्हें कुछ भी ताकि गड़बड़ी को ठीक किया जा सके. ऐसा होने की उम्मीद नहीं है.

अगर एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस के दौरान vold को किसी गड़बड़ी का पता चलता है, तो यह vold.encrypt_progress से error_partially_encrypted तक और -1 दिखाता है. इसके बाद, यूज़र इंटरफ़ेस (यूआई) को यह मैसेज दिखाएगा कि एन्क्रिप्ट (सुरक्षित) करने का तरीका बताया गया है अपडेट नहीं किया जा सका और डिवाइस को फ़ैक्ट्री रीसेट करने का बटन दिया गया है.

एन्क्रिप्ट (सुरक्षित) की गई कुंजी को सेव किया जा रहा है

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

  1. रैंडम 16-बाइट डिस्क एन्क्रिप्शन की (डीईके) और 16-बाइट सॉल्ट जनरेट करें.
  2. 32-बाइट वाला इंटरमीडिएट बनाने के लिए, उपयोगकर्ता पासवर्ड और सॉल्ट में स्क्रिप्ट लागू करें कुंजी 1 (IK1).
  3. हार्डवेयर-बाउंड प्राइवेट की (HBK) के आकार में शून्य बाइट वाला IK1. विशेष रूप से, हम इस रूप में पैड करते हैं: 00 || आईके1| 00..00; एक शून्य बाइट, 32 IK1 बाइट, 223 शून्य बाइट होना चाहिए.
  4. 256-बाइट IK2 बनाने के लिए पैड किए गए IK1 को HBK के साथ साइन करें.
  5. 32-बाइट IK3 बनाने के लिए, स्क्रिप्ट को IK2 और नमक (दूसरे चरण की तरह ही) में डालें.
  6. IK3 की शुरुआती 16 बाइट का इस्तेमाल केईके के तौर पर और आखिरी 16 बाइट को आईवी के तौर पर करें.
  7. डीईके को AES_CBC की मदद से एन्क्रिप्ट (सुरक्षित) करें. इसके लिए, केईके और इनिशलाइज़ेशन वेक्टर IV का इस्तेमाल करें.

पासवर्ड बदलना

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

एन्क्रिप्ट (सुरक्षित) करने से जुड़ी प्रॉपर्टी

vold और init एक-दूसरे से इसके ज़रिए बातचीत करते हैं सेटिंग प्रॉपर्टी. यहां एन्क्रिप्ट (सुरक्षित) करने के लिए उपलब्ध प्रॉपर्टी की सूची दी गई है.

वोल्ड प्रॉपर्टी

प्रॉपर्टी ब्यौरा
vold.decrypt trigger_encryption बिना कोई रुकावट किए ड्राइव को एन्क्रिप्ट (सुरक्षित) करें पासवर्ड डालें.
vold.decrypt trigger_default_encryption यह देखने के लिए डिस्क की जांच करें कि उसे बिना पासवर्ड के एन्क्रिप्ट किया गया है या नहीं. अगर ऐसा है, तो उसे डिक्रिप्ट और डिक्रिप्ट करें, या फिर, vold.decrypt को generate_restart_min_framework पर सेट करें.
vold.decrypt trigger_reset_main डिस्क का पासवर्ड मांगने वाला यूज़र इंटरफ़ेस (यूआई) बंद करने के लिए, वॉल्ड की मदद से सेट करें.
vold.decrypt trigger_post_fs_data /data को ज़रूरी डायरेक्ट्री के साथ तैयार करने के लिए, वॉल्यूम के हिसाब से सेट करें.
vold.decrypt trigger_restart_framework असल फ़्रेमवर्क और सभी सेवाओं को चालू करने के लिए vold सेट करें.
vold.decrypt trigger_shutdown_framework डेटा को एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस शुरू करने के लिए, इसे पूरा फ़्रेमवर्क बंद करने के लिए वॉल्ड पर सेट करें.
vold.decrypt trigger_restart_min_framework वॉल्यूम से सेट करें एन्क्रिप्शन के लिए प्रोग्रेस बार यूज़र इंटरफ़ेस (यूआई) या पासवर्ड के लिए संकेत, जो इस पर निर्भर करता है ro.crypto.state की वैल्यू.
vold.encrypt_progress फ़्रेमवर्क शुरू होने पर, अगर यह प्रॉपर्टी सेट है, तो प्रोग्रेस बार यूज़र इंटरफ़ेस (यूआई) मोड.
vold.encrypt_progress 0 to 100 प्रोग्रेस बार यूज़र इंटरफ़ेस (यूआई) को प्रतिशत वैल्यू के सेट को दिखाता है.
vold.encrypt_progress error_partially_encrypted प्रोग्रेस बार के यूज़र इंटरफ़ेस (यूआई) पर यह मैसेज दिखना चाहिए कि एन्क्रिप्ट (सुरक्षित) नहीं हो सका. उपयोगकर्ता को ये काम करने का विकल्प देना डिवाइस को फ़ैक्ट्री रीसेट कर दिया जाता है.
vold.encrypt_progress error_reboot_failed प्रोग्रेस बार के यूज़र इंटरफ़ेस (यूआई) पर यह मैसेज दिखना चाहिए: एन्क्रिप्शन पूरा हो जाए, और उपयोगकर्ता को डिवाइस फिर चालू करने का बटन दें. यह गड़बड़ी ऐसा होने की उम्मीद नहीं है.
vold.encrypt_progress error_not_encrypted प्रोग्रेस बार यूज़र इंटरफ़ेस (यूआई) को गड़बड़ी वाला मैसेज दिखाओ नहीं हुए, तो कोई डेटा एन्क्रिप्ट (सुरक्षित) नहीं किया गया था या साथ ही, उपयोगकर्ता को सिस्टम फिर से चालू करने का बटन दें.
vold.encrypt_progress error_shutting_down प्रोग्रेस बार का यूज़र इंटरफ़ेस (यूआई) काम नहीं कर रहा है. इसलिए, यह नहीं पता कि जवाब कौन देगा इस गड़बड़ी को ठीक करना. और ऐसा कभी नहीं होना चाहिए.
vold.post_fs_data_done 0 vold.decrypt को सेट करने से ठीक पहले vold ने सेट किया trigger_post_fs_data के लिए.
vold.post_fs_data_done 1 इसे init.rc ने सेट किया हो या init.rc टास्क पूरा होने के बाद post-fs-data.

init प्रॉपर्टी

प्रॉपर्टी ब्यौरा
ro.crypto.fs_crypto_blkdev बाद में इस्तेमाल के लिए vold निर्देश checkpw की मदद से सेट करें vold निर्देश restart के मुताबिक.
ro.crypto.state unencrypted init के हिसाब से यह सिस्टम, एन्क्रिप्ट (सुरक्षित) नहीं किए गए मोड के साथ चल रहा है /data ro.crypto.state encrypted. कहने के लिए init ने सेट किया यह सिस्टम, एन्क्रिप्ट (सुरक्षित) किए गए /data पर चल रहा है.

ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags

ये पांच प्रॉपर्टी init से पास किए गए पैरामीटर के साथ, /data को माउंट करने की कोशिश करते समय init.rc. vold इनका इस्तेमाल क्रिप्टो मैपिंग सेट अप करने के लिए करता है.
ro.crypto.tmpfs_options init.rc ने विकल्प के तौर पर सेट किया. इन विकल्पों का इस्तेमाल कब करना चाहिए tmpfs /data फ़ाइल सिस्टम को माउंट करना.

शुरू करने की कार्रवाइयां

on post-fs-data
on nonencrypted
on property:vold.decrypt=trigger_reset_main
on property:vold.decrypt=trigger_post_fs_data
on property:vold.decrypt=trigger_restart_min_framework
on property:vold.decrypt=trigger_restart_framework
on property:vold.decrypt=trigger_shutdown_framework
on property:vold.decrypt=trigger_encryption
on property:vold.decrypt=trigger_default_encryption