SD卡安全加密之锁卡与解除、写保护以及内设密码

    上一篇介绍了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实现,其数据包中包括该命令中所有的信息。

SD卡安全加密之锁卡与解除、写保护以及内设密码_第1张图片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,旧密码[n],新密码[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卡安全加密之锁卡与解除、写保护以及内设密码_第2张图片


你可能感兴趣的:(嵌入式,程序开发,SD卡安全加密)