what is ima :

      IMA是一个远程认证机构,它可以使远程对方相信系统正在运行程序是安全可信的。

     另一种解释:IMA是一种软件体系结构,并且是Linux上的一个实现,他可以通过使用另一个系统的当前运行时的属性来提供测量该系统可核查的证据 ,这话有点绕,就是说我们需要测量的其他的系统运行的的属性,其中部分属性可以作为IMA的测量值,这个测量值可以用来测量其他系统的软件环境的可信性 。

     使用IMA的证据,使用这种不依赖系统的证据来保证测量系统的软件环境的可信性。

how is work:

     那么 在linux内核的实现中,IMA 最先被启动,之后他可以计算之后所有程序运行之前计算该程序的SHA1 值,这个SHA1 可以唯一标识一个程序和他的运行环境。

  
通过IMA 来验证目标系统是否可信有三个前提:1 、我们要有一个可信系统的指纹数据,里面有各种软件运行的SHA1 值 2、然后在验证的过程中 ,数据不能被修改 。 这样我们才能判断一个软件的可信度。3、SHA1 安全的hash算法,这个可以保证不用的程序的hash值肯定是不同的。(只是我的个人理解)

1 、challenging party 生成一个随机数,这个随机数是用来确保之后的有attesting party 传来的数据是没有被修改的。

2、 将这个随机数 nonce 传给attesting party

3、  attesting party 将该系统的measuremeat list 和 { nonce ,PCR}  这个PCR 其实也是通过下面的方式生成的

in PCR: TPM-signed aggregate from step 3
in MList: Measurement list from step 3

 {
   uchar PCR_tmp[20] = {0...0}

   for (i=0; i<MList.len; i++)
        PCR_tmp = SHA1(PCR_tmp|MList[i])

   if (PCR == PCR_tmp)
        return OK
   else
        return INVALID
 }

4 challenging party  首先验证TPM 的数字签名,可以通过之前发给attesting party 的nonce 来验证,成功则证明attesting party 反馈的 。

5 这一步 是用来验证measurement list 是否有被修改,如果计算的PCR_TMP 和传来的PCR 一样,则证明没没有被修改。

6 这一步 就用传来的list 和我们之前的指纹数据库作对比,如果list 的内容 都可以在数据库中找到,那么就证明软件系统是可信的。

Trade-offs & Challenges:

    其中值得一提的是:nonce 的使用 可以保证有attesting party 传来的measurement list 必须是最新的,不然他不会和challenge party 的验证匹配上。

     TPM 在所有的环境中都起到了重要作用,因为是硬件设备,所以可以保证不被其他软件所修改,只有内核才能进行访问。那么基于TPM 认证 需要一套完善的公钥基础设施。