SD卡安全加密之锁卡与解除、写保护以及内设密码
2018-03-10 00:53
344 查看
上一篇介绍了SD卡底层驱动程序的调试手段和时序过程,适合初学者学习,但是在汽车级的涉及安全的大型项目中就需要一些数据安全保护。现在介绍一下SD卡的保护与解除方面的知识点。
SD卡官方英文资料中(可在该链接中下载 https://download.csdn.net/download/code_dzhangteng/10278568)介绍了三种方式:1, 硬件写保护;2,SD卡内部软件写保护;,3,SD卡锁卡/密码。第一种简单易行,但很难做到安全保密;第二种过于复杂,需要对要写保护的块地址一一设置,给自己增加很大的负担;第三种是锁卡,用户需要密码,这个设置密码与使用密码可以放在嵌入式单片机中,不会增加任何负担。在汽车级嵌入式中,这个方法很实用,很安全。
1, SD卡侧面有一个LOCK标识和开关。开关推至LOCK处,SD卡就处于硬件写保护,不能对SD卡内部数据进行写操作;开关推至LOCK另一侧,SD卡就解除硬件写保护。
2, SD卡块写保护为Card Command Class 6中的命令,CMD28为设置 写保护 块地址;CMD29为擦除 写保护 块地址;CMD30为查询命令,查询写保护位状态。
eg:发送CMD28命令:0x5C,0x##,0x##,0x##,0x##,0xFF;四个0x##是要设置 写保护的块地址。如果不明白,可以参考上一篇中的介绍。
3, SD卡具有安全加密功能。在加密状态下,用户需提供密码才可以访问卡内的数据。在卡上电时,若卡包含密码,卡自动进入锁定状态,读写命令均返回错误,以保护卡内容不被读出及修改。
密码设置功能由CMD42实现,其数据包中包括该命令中所有的信息。
eg:
①设定锁卡状态(LOCK)
使用CMD16设置Block长度为PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x04,LEN,密码[LEN]……,0xFF,0xFF;
使用CMD16恢复原Block长度。
②解除锁卡状态(UNLOCK)
使用CMD16设置Block长度为1;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x08,0xFF,0xFF;
使用CMD16恢复原Block长度。
eg:
①设置PWD(密码)
使用CMD16设置Block长度为密码长度为PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
使用CMD16恢复原Block长度。
②清除PWD(密码)
使用CMD16设置Block长度为PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x02,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
使用CMD16恢复原Block长度。
③修改PWD(密码)
使用CMD16设置Block长度为OLD_PWD_LEN+NEW_PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x05,LEN,旧密码
,新密码[m]……,0xFF,0xFF;
使用CMD16恢复原Block长度。
通过上述的方法可以很好的设置密码锁卡,保护SD卡中的内容。平时拿到被锁的卡,自己不能使用时,也可以用上述的方法强制擦除锁卡状态,恢复使用。
注:上文中的链接是CSDN下载链接,其中有①SD卡物理层协议Ver2.0(2006年);②SD卡物理层协议Ver3.01(2010年);③SD卡物理层协议Ver4.10(2013年);④SD卡物理层协议Ver6.00(2017年)。
SD卡使用哪个版本,可以根据下图选择与SD卡对应的版本解读SD物理层协议。(推荐学习Ver6.00最新版本)。
SD卡官方英文资料中(可在该链接中下载 https://download.csdn.net/download/code_dzhangteng/10278568)介绍了三种方式:1, 硬件写保护;2,SD卡内部软件写保护;,3,SD卡锁卡/密码。第一种简单易行,但很难做到安全保密;第二种过于复杂,需要对要写保护的块地址一一设置,给自己增加很大的负担;第三种是锁卡,用户需要密码,这个设置密码与使用密码可以放在嵌入式单片机中,不会增加任何负担。在汽车级嵌入式中,这个方法很实用,很安全。
1, SD卡侧面有一个LOCK标识和开关。开关推至LOCK处,SD卡就处于硬件写保护,不能对SD卡内部数据进行写操作;开关推至LOCK另一侧,SD卡就解除硬件写保护。
2, SD卡块写保护为Card Command Class 6中的命令,CMD28为设置 写保护 块地址;CMD29为擦除 写保护 块地址;CMD30为查询命令,查询写保护位状态。
eg:发送CMD28命令:0x5C,0x##,0x##,0x##,0x##,0xFF;四个0x##是要设置 写保护的块地址。如果不明白,可以参考上一篇中的介绍。
3, SD卡具有安全加密功能。在加密状态下,用户需提供密码才可以访问卡内的数据。在卡上电时,若卡包含密码,卡自动进入锁定状态,读写命令均返回错误,以保护卡内容不被读出及修改。
密码设置功能由CMD42实现,其数据包中包括该命令中所有的信息。
eg:
①设定锁卡状态(LOCK)
使用CMD16设置Block长度为PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x04,LEN,密码[LEN]……,0xFF,0xFF;
使用CMD16恢复原Block长度。
②解除锁卡状态(UNLOCK)
使用CMD16设置Block长度为1;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x08,0xFF,0xFF;
使用CMD16恢复原Block长度。
eg:
①设置PWD(密码)
使用CMD16设置Block长度为密码长度为PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
使用CMD16恢复原Block长度。
②清除PWD(密码)
使用CMD16设置Block长度为PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x02,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;
使用CMD16恢复原Block长度。
③修改PWD(密码)
使用CMD16设置Block长度为OLD_PWD_LEN+NEW_PWD_LEN+2;
发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;
发送命令数据:0x05,LEN,旧密码
,新密码[m]……,0xFF,0xFF;
使用CMD16恢复原Block长度。
通过上述的方法可以很好的设置密码锁卡,保护SD卡中的内容。平时拿到被锁的卡,自己不能使用时,也可以用上述的方法强制擦除锁卡状态,恢复使用。
注:上文中的链接是CSDN下载链接,其中有①SD卡物理层协议Ver2.0(2006年);②SD卡物理层协议Ver3.01(2010年);③SD卡物理层协议Ver4.10(2013年);④SD卡物理层协议Ver6.00(2017年)。
SD卡使用哪个版本,可以根据下图选择与SD卡对应的版本解读SD物理层协议。(推荐学习Ver6.00最新版本)。
相关文章推荐
- 个人隐私保护8:真正进入加密U盘实战4(修改密码)以及高级使用技巧
- [Utility.sln]根据MSDN上的DESCryptoServiceProvider 类 尝试写的对称密钥加密原代码[可应用于安全级别不高的数据连接和密码保护]
- proxool配置文件中用户名和密码使用加密后的密文(安全测评)
- 只改一点点 解除Word文档密码保护
- [置顶] App安全登录之密码、通讯加密方法(MD5,Base64,RSA,AES)
- iOS 安全模型浅析(三) ---- 数据保护和全盘加密
- OpenXml获取被保护Sheet的密码并解除保护
- .NET程序混淆、安全、保护、加密
- 网络安全基础笔记2——常规加密之经典密码
- 静态库是不安全的 appro aew 2A 静态库破解:解除与加密芯片的绑定 dm368ipnc
- OGG 安全特性--加密数据库密码
- 对西部数据硬盘自带的加密进行修改密码和取消密码保护
- 常见的用户密码加密方式以及破解方法
- 常见的用户密码加密方式以及破解方法
- Linux用户管理安全宝典:密码防破解与帐号文件保护(1)
- Linux用户管理安全宝典:密码防破解与帐号文件保护(二)
- linux磁盘的加密保护以及u盘加密的方法。
- 域环境下如何保护重要资料文件的安全(一)---EFS加密(下)
- [转].net程序混淆、安全、保护、加密
- 密码加密以及发邮件激活