最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Android M 鎖屏密碼存儲(chǔ)方式

 更新時(shí)間:2017年04月14日 10:11:10   投稿:jingxian  
下面小編就為大家?guī)硪黄钊肜斫釧ndroid M 鎖屏密碼存儲(chǔ)方式。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

Android M 之前鎖屏密碼的存儲(chǔ)

在 Android M 之前,鎖屏密碼的存儲(chǔ)格式很簡(jiǎn)單,其使用了 64 位隨機(jī)數(shù)作為 salt 值,此 salt 值被存儲(chǔ)在 SQLite 數(shù)據(jù)庫(kù) /data/system/locksettings.db 中。密碼在存儲(chǔ)的時(shí)候,會(huì)將輸入的密碼加上此隨機(jī)數(shù)組成新的字符串。然后對(duì)新的字符串分別進(jìn)行 SHA-1 和 MD5 加密,將加密后的密文通過 MD5 + SHA-1 的方式進(jìn)行字符串拼接,組成新的密文存儲(chǔ)在 /data/system/password.key 中,共有 72 位。其加密后的形式如下:

/data/system # cat password.keyB40C2F6FE4E89F3386D4E689B135304410D64951914FB35770FDAC58B694177B29297A80

而密碼的詳細(xì)信息,存儲(chǔ)在 /data/system/device_policies.xml 中,內(nèi)容類似如下:

/data/system # cat device_policies.xml

其中主要用到的兩個(gè)字段 quality 是密碼的類型,簡(jiǎn)單密碼和復(fù)雜密碼的值不同,length 是密碼的長(zhǎng)度,其他字段存儲(chǔ)密碼中各種字符的數(shù)量。

Android M 中鎖屏密碼的存儲(chǔ)

在 Android M 中,鎖屏密碼的存儲(chǔ)格式發(fā)生了變化,其默認(rèn)的存儲(chǔ)格式在/system/gatekeeper/include/gatekeeper/password_handle.h 中描述如下:

typedef uint64_t secure_id_t;typedef uint64_t salt_t;/** * structure for easy serialization * and deserialization of password handles. */static const uint8_t HANDLE_VERSION = 2;struct __attribute__ ((__packed__)) password_handle_t {  // fields included in signature  uint8_t version;  secure_id_t user_id;  uint64_t flags;  // fields not included in signature  salt_t salt;  uint8_t signature[32];  bool hardware_backed;};

其中 version 默認(rèn)是 2,user_id 是 Android 用戶 id ,signature 存儲(chǔ)的便是密文,hardware_backed 存儲(chǔ)的是加密方式,0 表示密文是軟件加密,而 1 表示密文是通過 TEE 環(huán)境進(jìn)行加密得到的。

密碼加密后默認(rèn)以 password_handle_t 格式存儲(chǔ)在/data/system/gatekeeper.password.key 中。密碼的生成和校驗(yàn),在 HAL 層是通過 system/core/gatekeeperd/gatekeeperd.cpp 中的函數(shù)實(shí)現(xiàn)的。其在系統(tǒng)啟動(dòng)時(shí)被注冊(cè)為 gatekeeperd 服務(wù),服務(wù)在啟動(dòng)的時(shí)候會(huì)調(diào)用 GateKeeperProxy()對(duì)象,此類的構(gòu)造函數(shù)會(huì)去查找 TEE module,如果找到,則通過 TEE 設(shè)備進(jìn)行加解密,如果沒有找到,則通過一個(gè)軟件設(shè)備進(jìn)行加解密。

這里主要分析下通過軟甲設(shè)備解密的邏輯。解密時(shí),會(huì)調(diào)用到system/core/gatekeeperd/gatekeeperd.cpp 中的以下函數(shù):

int verify(uint32_t uid, const uint8_t *enrolled_password_handle,      
uint32_t enrolled_password_handle_length,      
const uint8_t *provided_password, uint32_t provided_password_length,      
bool *request_reenroll)

在此函數(shù)中,由于沒有使用 TEE,所以會(huì)調(diào)用到軟件設(shè)備驗(yàn)證 system/core/gatekeeperd/SoftGateKeeperDevice.cpp 中的:

int SoftGateKeeperDevice::verify(uint32_t uid,  
uint64_t challenge, const uint8_t *enrolled_password_handle,  
uint32_t enrolled_password_handle_length, const uint8_t *provided_password,  
uint32_t provided_password_length, uint8_t **auth_token, uint32_t *auth_token_length,  
bool *request_reenroll)

函數(shù)進(jìn)行校驗(yàn),此函數(shù)對(duì)傳進(jìn)來的信息進(jìn)行處理后交到system/gatekeeper/gatekeeper.cpp 中的

void GateKeeper::Verify(const VerifyRequest &request, VerifyResponse *response)

進(jìn)行處理,在這里對(duì)參數(shù)進(jìn)行一系列處理和重新組織后再交給

bool GateKeeper::DoVerify(const password_handle_t *expected_handle, const SizedBuffer &password)

進(jìn)行校驗(yàn),在此函數(shù)中,再調(diào)用

bool GateKeeper::CreatePasswordHandle(SizedBuffer *password_handle_buffer, salt_t salt,  
secure_id_t user_id, uint64_t flags, uint8_t handle_version, const uint8_t *password,  
uint32_t password_length)

將上面提到的 /data/system/gatekeeper.password.key

文件中存儲(chǔ)的信息進(jìn)行解析,然后調(diào)用

ComputePasswordSignature(password_handle->signature, sizeof(password_handle->signature),      
password_key, password_key_length, to_sign, sizeof(to_sign), salt);

函數(shù)將輸入的密碼進(jìn)行加密,從這里可以看到,輸入的密碼要加密成密文只需要用到存儲(chǔ)的密碼中的 salt 值,此函數(shù)在system/core/gatekeeperd/SoftGateKeeper.h 中,其調(diào)用 crypto 庫(kù)中的

crypto_scrypt(password, password_length, reinterpret_cast(&salt),    
sizeof(salt), N, r, p, signature, signature_length);

將輸入的密碼存儲(chǔ)在 signature 中并返回。此函數(shù)最終會(huì)通過 SHA256 進(jìn)行加密,參數(shù)中的 N, r, p 默認(rèn)為如下值:

static const uint64_t N = 16384;static const uint32_t r = 8;static const uint32_t p = 1;

通過以上處理后對(duì)輸入的密碼加密后得到的密文與手機(jī)中存儲(chǔ)的密文進(jìn)行比較后返回校驗(yàn)結(jié)果,從而判斷輸入的密碼的正確與否。

在 Android M 中,改變了之前直接在 Java 層進(jìn)行密碼校驗(yàn)的方式,將密碼的校驗(yàn)通過 HAL 層的服務(wù)進(jìn)行處理,同時(shí)加入對(duì) TEE 的支持,使得鎖屏密碼的安全性大大提升,同時(shí)也可以方便的支持其他的安全特性,提升了整個(gè)系統(tǒng)的安全性。

以上這篇深入理解Android M 鎖屏密碼存儲(chǔ)方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 設(shè)置Edittext獲取焦點(diǎn)并彈出軟鍵盤

    Android 設(shè)置Edittext獲取焦點(diǎn)并彈出軟鍵盤

    本文主要介紹了Android設(shè)置Edittext獲取焦點(diǎn)并彈出軟鍵盤的實(shí)現(xiàn)代碼。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-04-04
  • Android開發(fā)之MediaPlayer基本使用方法詳解

    Android開發(fā)之MediaPlayer基本使用方法詳解

    這篇文章主要介紹了Android開發(fā)之MediaPlayer基本使用方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了MediaPlayer中的常用函數(shù)與基本使用技巧,需要的朋友可以參考下
    2017-05-05
  • Android基于方法池與回調(diào)實(shí)現(xiàn)登錄攔截的場(chǎng)景

    Android基于方法池與回調(diào)實(shí)現(xiàn)登錄攔截的場(chǎng)景

    這篇文章主要為大家介紹了Android基于方法池與回調(diào)實(shí)現(xiàn)登錄攔截的場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Android 炫舞漫天飛雪效果圖

    Android 炫舞漫天飛雪效果圖

    這篇文章主要介紹了Android 炫舞漫天飛雪效果圖的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Android筆記整理之常見錯(cuò)誤及解決方案匯總

    Android筆記整理之常見錯(cuò)誤及解決方案匯總

    本文是小編日常整理的筆記關(guān)于android常見的錯(cuò)誤及解決方案,本文對(duì)大家學(xué)習(xí)android相關(guān)知識(shí)非常有幫助,遇到問題能夠很好的定位問題解決問題,感興趣的朋友了解了解吧
    2015-11-11
  • Android ListView列表視圖的使用方法

    Android ListView列表視圖的使用方法

    這篇文章主要為大家詳細(xì)介紹了Android ListView列表視圖的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android?Jetpack庫(kù)重要組件WorkManager的使用

    Android?Jetpack庫(kù)重要組件WorkManager的使用

    WorkManager是Android?Jetpack的一個(gè)強(qiáng)大的組件,用于處理后臺(tái)耗時(shí)任務(wù)。后臺(tái)任務(wù)可以是一次性的,也可以是重復(fù)的,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • ubuntu上在androidstudio中啟動(dòng)emulator閃退的解決方法

    ubuntu上在androidstudio中啟動(dòng)emulator閃退的解決方法

    在AndrodStudio中點(diǎn)擊模擬器的啟動(dòng)按鈕后,模擬器界面彈出后,又立刻閃退。下面通過本文給大家分享ubuntu上在androidstudio中啟動(dòng)emulator閃退的解決方法,一起看看吧
    2017-07-07
  • Google大佬都用的廣播goAsync源碼分析

    Google大佬都用的廣播goAsync源碼分析

    這篇文章主要為大家介紹了Google大佬都用的廣播?goAsync源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android模仿用戶設(shè)置密碼實(shí)例

    Android模仿用戶設(shè)置密碼實(shí)例

    首先有2個(gè)對(duì)話框,沒有設(shè)置過密碼,需要設(shè)置dialog_set_password.xml,用戶設(shè)置過密碼,不需要設(shè)置,直接輸入密碼dialog_input_password.xml,具體實(shí)現(xiàn)代碼,大家參考下本文
    2017-03-03

最新評(píng)論

运城市| 溆浦县| 大宁县| 昌吉市| 卢氏县| 池州市| 太康县| 鹤山市| 内江市| 光山县| 镶黄旗| 澜沧| 夹江县| 开江县| 鹤山市| 郎溪县| 遵化市| 丹棱县| 石台县| 大埔区| 开江县| 抚松县| 泾源县| 洮南市| 龙山县| 通道| 安龙县| 资源县| 肃南| 柯坪县| 邹城市| 岱山县| 山阳县| 鄂州市| 双城市| 牟定县| 砀山县| 奇台县| 丹东市| 寿宁县| 鲁甸县|