पूरी डिस्क को एन्क्रिप्ट (सुरक्षित) करने का तरीका, किसी 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 डिवाइस का पहला बूट होता है.
forceencrypt
फ़्लैग की मदद से, एन्क्रिप्ट (सुरक्षित) नहीं किए गए फ़ाइल सिस्टम का पता लगाएं/data
को एन्क्रिप्ट (सुरक्षित) नहीं किया गया है, क्योंकिforceencrypt
के लिए यह ज़रूरी है./data
को अलग करें./data
को एन्क्रिप्ट (सुरक्षित) करना शुरू करेंvold.decrypt = "trigger_encryption"
नेinit.rc
को ट्रिगर किया, जिसकी वजह सेvold
,/data
को बिना पासवर्ड के एन्क्रिप्ट (सुरक्षित) कर देगा. (कोई भी सेट नहीं है क्योंकि यह एक नया डिवाइस होना चाहिए.)- माउंट टीएमपीएफ़एस
vold
, tmpfs/data
को माउंट करता है (इसके लिए tmpfs विकल्पों का इस्तेमाल करता हैro.crypto.tmpfs_options
) प्रॉपर्टी कोvold.encrypt_progress
प्रॉपर्टी के तौर पर 0 पर सेट किया जाता है.vold
, एन्क्रिप्ट (सुरक्षित) किए गए सिस्टम को चालू करने के लिए, tmpfs/data
को तैयार करता है और प्रॉपर्टीvold.decrypt
इससे:trigger_restart_min_framework
- प्रोग्रेस दिखाने के लिए फ़्रेमवर्क तैयार करना
डिवाइस में एन्क्रिप्ट (सुरक्षित) करने के लिए कोई डेटा मौजूद नहीं है. इसलिए, प्रोग्रेस बार वे अक्सर नहीं दिखते, क्योंकि एन्क्रिप्शन बहुत तेज़ी से हो जाता है. यहां जाएं: ज़्यादा जानकारी के लिए, मौजूदा डिवाइस को एन्क्रिप्ट (सुरक्षित) करें प्रोग्रेस यूज़र इंटरफ़ेस (यूआई) की जानकारी.
/data
के एन्क्रिप्ट (सुरक्षित) होने पर, फ़्रेमवर्क को हटा देंvold
,vold.decrypt
को इस पर सेट करता हैtrigger_default_encryption
जोdefaultcrypto
सेवा. (इससे, किसी प्रॉडक्ट को माउंट करने के लिए नीचे दिया गया फ़्लो शुरू होता है उपयोगकर्ता का डिफ़ॉल्ट एन्क्रिप्टेड डेटा.)trigger_default_encryption
एन्क्रिप्ट (सुरक्षित) करने का तरीका, ताकि यह देखा जा सके कि/data
को पासवर्ड डालें. Android 5.0 डिवाइस को पहली बार बूट करने पर एन्क्रिप्ट (सुरक्षित) किया जाता है, इसलिए ऐसा होना चाहिए पासवर्ड सेट न हो; इसलिए, हम/data
को डिक्रिप्ट और डिक्रिप्ट करते हैं.- माउंट
/data
इसके बाद,
init
इसका इस्तेमाल करके/data
को tmpfs रैम डिस्क पर माउंट करता है पैरामीटर, जिसे यहro.crypto.tmpfs_options
से चुनता है, जो कि एक बार सेट हैinit.rc
में. - शुरुआती फ़्रेमवर्क
vold
,vold.decrypt
को इस पर सेट करता हैtrigger_restart_framework
, जो सामान्य तरीके से चालू रहता है प्रोसेस.
मौजूदा डिवाइस एन्क्रिप्ट (सुरक्षित) करें
ऐसा तब होता है, जब एन्क्रिप्ट (सुरक्षित) नहीं किए गए Android K या इससे पहले के वर्शन को एन्क्रिप्ट (सुरक्षित) किया जाता है L पर माइग्रेट किया गया डिवाइस.
यह प्रोसेस उपयोगकर्ता की ओर से शुरू की जाती है. इसे कोड डालें. जब कोई उपयोगकर्ता किसी डिवाइस को एन्क्रिप्ट करने का विकल्प चुनता है, तो यूज़र इंटरफ़ेस (यूआई) यह पक्का करता है कि बैटरी पूरी तरह चार्ज है और AC अडैप्टर को प्लग-इन किया गया है, ताकि हम एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस को पूरा करते हैं.
चेतावनी: अगर डिवाइस की बैटरी खत्म हो जाती है और काम पूरा होने से पहले ही बंद हो जाता है एन्क्रिप्ट करने के दौरान, फ़ाइल का डेटा कुछ हद तक एन्क्रिप्ट यानी सुरक्षित किया जाता है. डिवाइस को फ़ैक्ट्री रीसेट करने से आपका पूरा डेटा मिट जाएगा.
जगह की जानकारी को एन्क्रिप्ट (सुरक्षित) करने की सुविधा चालू करने के लिए, vold
एक लूप शुरू करता है, ताकि हर टेक्स्ट को पढ़ा जा सके
रीयल ब्लॉक डिवाइस का सेक्टर चुनें और फिर इसे लिखें
क्रिप्टो ब्लॉक डिवाइस तक. vold
यह देखने के लिए जांच करता है कि कोई सेक्टर यहां है या नहीं
पढ़ने और लिखने से पहले इस्तेमाल करें, जिससे
ज़्यादा तेज़ी से एन्क्रिप्ट करने की सुविधा मिलती है.
डिवाइस की स्थिति: ro.crypto.state = "unencrypted"
सेट करें
और चालू करने के लिए on nonencrypted
init
ट्रिगर को एक्ज़ीक्यूट करें.
- पासवर्ड की जांच करें
यूज़र इंटरफ़ेस (यूआई),
vold
कोcryptfs enablecrypto inplace
निर्देश के साथ कॉल करता है जहांpasswd
, उपयोगकर्ता का लॉक स्क्रीन पासवर्ड है. - फ़्रेमवर्क को हटाना
vold
, गड़बड़ियों का पता लगाता है और एन्क्रिप्ट (सुरक्षित) नहीं कर पाने पर, -1 दिखाता है. लॉग में किसी कारण को प्रिंट करता है. अगर यह एन्क्रिप्ट (सुरक्षित) कर सकता है, तो प्रॉपर्टीvold.decrypt
को सेट कर देगाtrigger_shutdown_framework
तक. इसकी वजह सेinit.rc
late_start
औरmain
क्लास में सेवाओं को रोक देती है. - क्रिप्टो फ़ुटर बनाना
- ब्रेडक्रंब फ़ाइल बनाना
- फिर से चालू करें
- ब्रेडक्रंब फ़ाइल का पता लगाना
/data
को एन्क्रिप्ट (सुरक्षित) करना शुरू करेंइसके बाद,
vold
क्रिप्टो मैपिंग सेट अप करता है, जिससे एक वर्चुअल क्रिप्टो ब्लॉक डिवाइस बनता है जो रीयल ब्लॉक डिवाइस पर मैप होती है, लेकिन हर सेक्टर के लिखे जाने के हिसाब से उसे एन्क्रिप्ट कर देती है, और पढ़े जाने के हिसाब से हर सेक्टर को डिक्रिप्ट करता है. इसके बादvold
, कॉन्टेंट बनाता और लिखता है क्रिप्टो मेटाडेटा हटा दें.- एन्क्रिप्ट करने के दौरान, tmpfs को माउंट करें
vold
, tmpfs के विकल्पों का इस्तेमाल करके/data
को माउंट करता हैro.crypto.tmpfs_options
से) और प्रॉपर्टी सेट करता हैvold.encrypt_progress
से 0 तक.vold
tmpf तैयार करता है एन्क्रिप्ट किए गए सिस्टम को चालू करने और प्रॉपर्टी को सेट करने के लिए/data
vold.decrypt
से:trigger_restart_min_framework
- प्रोग्रेस दिखाने के लिए फ़्रेमवर्क तैयार करना
trigger_restart_min_framework
के कारणinit.rc
की वजह सेmain
सेवाओं की श्रेणी शुरू करें. जब फ़्रेमवर्क देखता है किvold.encrypt_progress
को 0 पर सेट किया गया है. इससे प्रोग्रेस बार दिखेगा यूज़र इंटरफ़ेस (यूआई), जो हर पांच सेकंड में उस प्रॉपर्टी के लिए क्वेरी करता है और एक प्रोग्रेस बार को अपडेट करता है. हर बारvold.encrypt_progress
अपडेट होने पर, एन्क्रिप्ट (सुरक्षित) करने का लूप अपडेट हो जाता है विभाजन के दूसरे प्रतिशत को एन्क्रिप्ट करता है. /data
को एन्क्रिप्ट (सुरक्षित) करने के बाद, क्रिप्टो फ़ुटर अपडेट करेंजब
/data
को एन्क्रिप्ट (सुरक्षित) किया जाता है, तोvold
फ़ाइलें हटा देता है मेटाडेटा में फ़्लैगENCRYPTION_IN_PROGRESS
.डिवाइस के अनलॉक होने पर, पासवर्ड का इस्तेमाल इन कामों के लिए किया जाता है मास्टर कुंजी को एन्क्रिप्ट करें और क्रिप्टो फ़ुटर अपडेट हो जाता है.
अगर किसी वजह से डिवाइस फिर से चालू नहीं हो पाता है, तो
vold
प्रॉपर्टी को सेट करता हैvold.encrypt_progress
सेerror_reboot_failed
और यूज़र इंटरफ़ेस (यूआई) में एक मैसेज दिखना चाहिए. इस मैसेज में, उपयोगकर्ता से डिवाइस को फिर से चालू करें. ऐसा कभी होने की उम्मीद नहीं है.
एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को डिफ़ॉल्ट एन्क्रिप्शन के साथ चालू करना
ऐसा तब होता है, जब एन्क्रिप्ट किए गए किसी डिवाइस को बिना पासवर्ड के चालू किया जाता है. Android 5.0 डिवाइस को पहली बार चालू करने पर एन्क्रिप्ट (सुरक्षित) किया जाता है. इसलिए, कोई सेटिंग सेट नहीं की जानी चाहिए पासवर्ड है और इसलिए यह डिफ़ॉल्ट एन्क्रिप्शन स्थिति है.
- बिना पासवर्ड के एन्क्रिप्ट (सुरक्षित) किए गए
/data
का पता लगाएंपता करें कि Android डिवाइस को एन्क्रिप्ट (सुरक्षित) किया गया है, क्योंकि
/data
किसी एक फ़्लैग को माउंट नहीं किया जा सकताencryptable
याforceencrypt
सेट है.vold
,vold.decrypt
को इस पर सेट करता हैtrigger_default_encryption
, जोdefaultcrypto
सेवा.trigger_default_encryption
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है एन्क्रिप्शन के टाइप की जांच करके पता लगाता है कि/data
को बिना पासवर्ड के साइन इन करें. - डेटा को डिक्रिप्ट करना
ब्लॉक डिवाइस पर
dm-crypt
डिवाइस बनाता है, ताकि डिवाइस इस्तेमाल के लिए तैयार है. - माउंट /डेटा
इसके बाद,
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
में अपनी सेवाएं फिर से शुरू करें बूट के बाद से समय. - शुरुआती फ़्रेमवर्क
अब फ़्रेमवर्क, डिक्रिप्ट किए गए
/data
का इस्तेमाल करके अपनी सभी सेवाओं को चालू करता है. और सिस्टम इस्तेमाल के लिए तैयार है.
एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को एन्क्रिप्ट (सुरक्षित) करने के डिफ़ॉल्ट तरीके के बिना चालू करना
ऐसा तब होता है, जब आप ऐसे एन्क्रिप्ट किए गए डिवाइस को चालू करते हैं जिसमें पासवर्ड डालें. डिवाइस का पासवर्ड कोई पिन, पैटर्न या पासवर्ड हो सकता है.
- एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस का पासवर्ड से पता लगाना
पता लगाएं कि Android डिवाइस को एनक्रिप्ट (सुरक्षित) किया गया है, क्योंकि
ro.crypto.state = "encrypted"
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया हैvold
,vold.decrypt
को इस पर सेट करता हैtrigger_restart_min_framework
क्योंकि/data
है से एन्क्रिप्ट (सुरक्षित) किया जाता है. - माउंट टीएमपीएफ़एस
init
, माउंट करने के शुरुआती विकल्पों को सेव करने के लिए, पांच प्रॉपर्टी सेट करता हैinit.rc
से पास किए गए पैरामीटर के साथ,/data
के लिए दिया गया.vold
क्रिप्टो मैपिंग सेट अप करने के लिए इन प्रॉपर्टी का इस्तेमाल करता है:ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags
(ASCII का आठ अंकों का हेक्स नंबर, जिसके पहले 0x होता है)
- पासवर्ड के प्रॉम्प्ट के लिए फ़्रेमवर्क शुरू करें
फ़्रेमवर्क शुरू हो जाता है और पता चलता है कि
vold.decrypt
इस पर सेट हैtrigger_restart_min_framework
. इससे फ़्रेमवर्क को यह पता चलता है कि tmpfs/data
डिस्क पर चालू होता है और इसके लिए उपयोगकर्ता पासवर्ड की ज़रूरत होती है.हालांकि, सबसे पहले यह पक्का करना होगा कि डिस्क सही तरीके से एन्क्रिप्ट (सुरक्षित) की गई है. यह
vold
कोcryptfs cryptocomplete
निर्देश भेजता है. अगर एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस पूरी हो गई है, तोvold
0 दिखाता है, अंदरूनी गड़बड़ी होने पर -1 दिखाता है या -2 अगर एन्क्रिप्ट (सुरक्षित) नहीं किया गया.vold
तय करता है यहCRYPTO_ENCRYPTION_IN_PROGRESS
के लिए क्रिप्टो मेटाडेटा में जाकर देखा जा सकता है फ़्लैग करें. अगर यह सेट है, तो एन्क्रिप्ट (सुरक्षित) करने की प्रोसेस में रुकावट आई थी और को डिवाइस में इस्तेमाल किया जा सकता है. अगरvold
गड़बड़ी का मैसेज दिखाता है, तो यूज़र इंटरफ़ेस (यूआई) को डिवाइस को फिर से चालू करने और फ़ैक्ट्री रीसेट करने का मैसेज उपयोगकर्ता को दिखा सकता है. साथ ही, क्लिक करने के लिए बटन दबाएं. - पासवर्ड का इस्तेमाल करके डेटा डिक्रिप्ट करना
cryptfs cryptocomplete
के पूरा होने के बाद, फ़्रेमवर्क एक यूज़र इंटरफ़ेस (यूआई) दिखाता है, जिसमें डिस्क का पासवर्ड मांगा जाता है. यूज़र इंटरफ़ेस (यूआई) इसके हिसाब से पासवर्ड की जांच करता हैvold
कोcryptfs checkpw
निर्देश भेज रही हूँ. अगर पासवर्ड सही है (जिसका पता लगाने के लिए/data
को किसी अस्थायी जगह पर डिक्रिप्ट किया गया, फिर अलग किया गया),vold
, प्रॉपर्टी में डिक्रिप्ट किए गए ब्लॉक डिवाइस का नाम सेव करता हैro.crypto.fs_crypto_blkdev
और यूज़र इंटरफ़ेस (यूआई) पर स्थिति 0 दिखाता है. अगर पासवर्ड गलत है, तो यह यूज़र इंटरफ़ेस (यूआई) में -1 दिखाता है. - फ़्रेमवर्क बंद करना
यूज़र इंटरफ़ेस (यूआई) में क्रिप्टो बूट है ग्राफ़िक दिखता है और फिर वह
vold
को कॉल करता है निर्देशcryptfs restart
.vold
प्रॉपर्टी सेट करता हैvold.decrypt
सेtrigger_reset_main
तक, जिसकी वजह सेclass_reset main
कार्रवाई करने के लिएinit.rc
. इससे सभी सेवाएं बंद हो जाएंगी मुख्य क्लास में शामिल होती है, जिससे tmpfs/data
को अलग किया जा सकता है. - माउंट
/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
. - पूरा फ़्रेमवर्क शुरू करें
अब फ़्रेमवर्क, डिक्रिप्ट किए गए
/data
का इस्तेमाल करके अपनी सभी सेवाओं को चालू करता है फ़ाइल सिस्टम में सेव किया जाता है और सिस्टम इस्तेमाल के लिए तैयार है.
कार्रवाई सफल नहीं हुई
अगर कोई डिवाइस डिक्रिप्ट नहीं कर पाता है, तो उसके पीछे कुछ वजहें हो सकती हैं. डिवाइस इसे बूट करने के चरणों की सामान्य सीरीज़ से शुरू होता है:
- एन्क्रिप्ट (सुरक्षित) किए गए डिवाइस को पासवर्ड से पहचानें
- माउंट tmpfs
- पासवर्ड के प्रॉम्प्ट के लिए फ़्रेमवर्क शुरू करें
हालांकि, फ़्रेमवर्क खुलने के बाद डिवाइस में कुछ गड़बड़ियां हो सकती हैं:
- पासवर्ड मेल खाता है, लेकिन डेटा डिक्रिप्ट नहीं कर सकता
- उपयोगकर्ता 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 कुंजी के साथ. इसके बाद, नतीजे के तौर पर मिलने वाले हस्ताक्षर को स्क्रिप्ट के एक और ऐप्लिकेशन से लंबाई कुंजी. इसके बाद, एन्क्रिप्ट (सुरक्षित) करने के लिए इस कुंजी का इस्तेमाल किया जाता है और मास्टर कुंजी को डिक्रिप्ट कर सकता है. इस पासकोड को सेव करने के लिए:
- रैंडम 16-बाइट डिस्क एन्क्रिप्शन की (डीईके) और 16-बाइट सॉल्ट जनरेट करें.
- 32-बाइट वाला इंटरमीडिएट बनाने के लिए, उपयोगकर्ता पासवर्ड और सॉल्ट में स्क्रिप्ट लागू करें कुंजी 1 (IK1).
- हार्डवेयर-बाउंड प्राइवेट की (HBK) के आकार में शून्य बाइट वाला IK1. विशेष रूप से, हम इस रूप में पैड करते हैं: 00 || आईके1| 00..00; एक शून्य बाइट, 32 IK1 बाइट, 223 शून्य बाइट होना चाहिए.
- 256-बाइट IK2 बनाने के लिए पैड किए गए IK1 को HBK के साथ साइन करें.
- 32-बाइट IK3 बनाने के लिए, स्क्रिप्ट को IK2 और नमक (दूसरे चरण की तरह ही) में डालें.
- IK3 की शुरुआती 16 बाइट का इस्तेमाल केईके के तौर पर और आखिरी 16 बाइट को आईवी के तौर पर करें.
- डीईके को 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 पर चल रहा है. |
|
ये पांच प्रॉपर्टी
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