当前位置: 首页 > 知识库问答 >
问题:

Android:4位PIN的PBKDF2有多安全?

丘友樵
2023-03-14

加密代码如下所示:

const val CPR_TRANSFORMATION = "AES/CBC/PKCS7Padding"
const val ALGORITHM_TYPE = "PBKDF2WithHmacSHA1"
const val ITERATION_AMOUNT = 12000
const val KEY_SIZE = 256

private fun encrypt(passCode: String, data: ByteArray): Encrypted { //e.g.: passCode = "0000"
    val salt = ByteArray(256)
    SecureRandom().nextBytes(salt)

    val iv = ByteArray(16)
    SecureRandom().nextBytes(iv)

    val cipher = Cipher.getInstance(CPR_TRANSFORMATION)
    cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(passCode, salt), IvParameterSpec(iv))
    val raw = cipher.doFinal(data)
    return Encrypted(salt.encodeBase64(), iv.encodeBase64(), raw.encodeBase64())
}

private fun getSecretKey(passCode: String, salt: ByteArray): Key {
    val pbKeySpec = PBEKeySpec(passCode.toCharArray(), salt, ITERATION_AMOUNT, KEY_SIZE)
    val keyBytes = SecretKeyFactory.getInstance(ALGORITHM_TYPE).generateSecret(pbKeySpec).encoded
    return SecretKeySpec(keyBytes, KeyProperties.KEY_ALGORITHM_AES)
}
  • 攻击者如何从共享首选项检索刷新令牌并对其解密?
  • 对称密钥是否位于安全元素内?
  • 此实现对恶意软件或root有多安全?
  • 钥匙怎么容易被蛮逼?(用户手动尝试10k次以插入正确的pin除外)

共有1个答案

谯乐池
2023-03-14

攻击者如何从共享首选项检索刷新令牌并对其解密?

我不清楚它是如何检索的,我不确定如何从Android中的共享首选项中检索值。解密很简单,攻击者蛮力4位PIN。再多的拖延或盐也帮不了你。

对称密钥是否存在安全元件?

除了那个是什么意思?检索密钥的唯一方法是:

  1. 到bruteforce PBKDF2并尝试解密(这是迄今为止最明显的);
  2. 以某种方式读取secretkeyspec的内存(更难);
  3. 对AES实现执行可能泄漏密钥的侧通道攻击(如果您现在使用的是一个好的Android实现,这是非常棘手的。

基本上,如果你能限制猜测操作的数量,你只能使用PIN。加密值似乎不是这样。

 类似资料:
  • �� �� Android-PIN-Bruteforce Unlock an Android phone (or device) by bruteforcing the lockscreen PIN. Turn your Kali Nethunter phone into a bruteforce PIN cracker for Android devices! �� How it works I

  • uiautomatiorviewer uiautomatorviewer是Android SDK自带的工具,在$ANDROID_HOME/tools目录下。 使用的测试App为:旧爱,在各大应用市场都可以搜索到。 点击uiautomatorviewer.bat后,将鼠标置于元素之上,如下: 使用resource_id定位 driver.find_element_by_id("com.jiuai:i

  • Pin

    machine.Pin machine.Pin 类是 machine 模块下面的一个硬件类,用于对引脚的配置和控制,提供对 Pin 设备的操作方法。 Pin 对象用于控制输入/输出引脚(也称为 GPIO)。Pin 对象通常与一个物理引脚相关联,他可以驱动输出电压和读取输入电压。Pin 类中有设置引脚模式(输入/输出)的方法,也有获取和设置数字逻辑(0 或 1)的方法。 一个 Pin 对象是通过一个

  • PIN

    通过按键控制蜂鸣器对应引脚的电平状态进而控制蜂鸣器 通过按键控制蜂鸣器对应引脚的电平状态进而控制蜂鸣器 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-15

  • PIN

    PIN设备接口 结构体 struct   rt_device_pin_mode   引脚模式信息 更多...   struct   rt_device_pin_status   引脚状态信息 更多...   struct   rt_pin_irq_hdr   引脚中断信息 更多...   struct   rt_pin_ops   引脚的操作方法 更多...   宏定义 #define  PIN_

  • 我想在我的Android应用程序中处理位图——位图可能很大,所以我使用多线程来执行更快的操作。以下是我的代码(Runnable child的一部分): 当我只使用池中的一个线程时,一切正常。不幸的是,当我使用的线程数等于处理器的内核数(在我的设备中为4)时,结果如下(对于灰度过滤器): 有时看起来像: bitmap.get像素(...)不起作用,因为输出中有黑线 bitmap.set像素(...)