【UEFI】---BIOS中UserPassword的重复校验总结

  UEFI做为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的普遍承认。而其中不少编程所采用的思想确实值得学习。今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考。
先列干货,具体的小结后续补充:
  1. 明确你要的某个功能的实现逻辑,都须要在哪一个位置添加代码。
     (很重要,这决定着你的方案是否可行重要前提,一旦此步骤错误,后续的代码实现也会因为代码框架的不合适而彻底崩塌)
  2. 代码须要良好的封装性,高内聚性,低耦合性。秉着此原则。笔者建议写代码时从最终功能开始写起,用到什么变量,GUID,或者头文件定义,就去添加什么。这样能保证你添加的都是你须要的,且思路不会乱。
  3. UEFI框架下常常会涉及到一些GUID,包括跨Pkg的Lib调用,在此也会小结一下。

  OK, 干货就这几点,用笔者目前遇到的一个小问题--"BIOS Setup下UserPassWord重复设置密码能够成功的功能"为例进行说明。html

1. 流程梳理程序员

    a. 密码的存储和校验通常多采用HASH值校验的方式,优势【安全,简单】
    b. BIOS下的密码流程:编程

                          

 

 

  •  用户输入密码后,BIOS能拿到用户输入的字符串,首先须要对密码的复杂度进行验证。看复杂度是否符合。

           

 

 

  •  其次是将当前输入密码与以前的存储过的密码进行对比,如有重复则放弃。密码的存储的和对比通常是使用该字符串的Hash值,非明文存储简单安全。若符合要求,则进一步将密码进行存储         

    (CRB代码中提供了对AdminPassword的过往三次密码重复校验,其实现的流程比较复杂一些,可是其原理应该是经过对过去三次设置的密码进行Hash值存储校验,且须要按照顺序存储,毕竟只能存储过去的三次。这个地方应该使用了相似队列的方案,先进先出)安全

               

 

 

  • 最后就是在每次存储密码的时候,要把最终保存的Admin的密码的Hash存储到队列里面。原始最先存储的那个密码进行删除,将其后的两个密码Hash按顺序提高一位,而后将最新保存的密码放置在Hash队列中的第三位便可

2. 方案设计架构

  2.1  在最终保存密码的时候,设置一个Variable存储当前UserPassword的Hash框架

   2.2  在输入UserPassword后,读取上一次设置的密码Hash,与当前输入的密码Hash进行对比。判断是否能够被写入函数

3. 编码实现学习

  3.1 设置保存UserPassword的Hash值,咱们仅须要拿到当前输入密码的字符串,而后获得Sha256编值,再经过gRT->SetVariable的服务存储保存便可。初步编写的函数以下:    编码

              

 

  3.2 用户输入密码后,在作完复杂度校验后,添加UserPassWord的重复验证,代码以下:   spa

            

 

 

   3.3 最终将SetVariable的函数添加至BIOS保存退出时,设置密码的位置便可。

           

 

小结梳理:

  最终将SetVariable的函数添加至BIOS保存退出时,设置密码的位置便可。
  此Bug梳理以后其实挺简单的,回想本身的解问题思路,应该注意的几个点主要以下:
    a. 理清处原有的AdminPassword的检验机制,学习其的一些处理方法
    b. 编码时,对GUID和一些Lib库的调用有点不够清晰,也是经过本次整理从新梳理了下GUID的用法和Lib库的调用。(后续着重总结)
    c. 有一些过程功能函数,仅限在某个.c文件内部使用,这种状况下,果断考虑重写一套函数供本身使用。不要为了外部调用原有函数而花费过多无用的时间。
    d. 最最重要的一点,写代码时必定要明确需求,本身要写什么,在哪一个地方写?而后从最根本的需求处入手,须要什么就添加什么,这样才能稳住阵脚,从容应对。

  针对这次解决的一些小Bug,作以上总结,给同为程序猿的咱们,留下些许的足迹。

 

  一个普通程序员的成长路程,欢迎关注个人公众号,茫茫人海,能与你相遇既是有缘。哈哈

            

 

原文出处:https://www.cnblogs.com/szhb-5251/p/11518521.html

相关文章
相关标签/搜索