IMA 的简单介绍

      本文的内容来自于http://domino.research.ibm.com/comm/research_people.nsf/pages/sailer.ima.html

what is ima :

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

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

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

how is work:

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

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

ima-2

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 认证 需要一套完善的公钥基础设施。


欢迎访问我的博客 http://www.fuxiang90.me/?p=534 

### GitHub Copilot 介绍 GitHub Copilot 是一种由人工智能驱动的编码辅助工具,旨在协助开发者更加高效地编写代码[^1]。该工具能够理解上下文并基于已有的少量提示给出合理的代码建议甚至整个函数实现。 ### 安装与配置 为了开始使用 GitHub Copilot,在完成必要的身份验证过程之后——比如对于学生用户来说就是先获取到 GitHub 学生包认证后的资格确认邮件通知——就可以前往个人账户设置页面激活服务[^3]。一旦订阅被接受,按照官方文档指导安装适用于所选集成开发环境 (IDE) 或编辑器(如 Visual Studio Code, JetBrains IDEs 等)的插件即可[^2]。 ### 功能特性 当启用后,Copilot 将自动分析当前文件中的现有代码结构,并尝试预测接下来可能需要编写的逻辑部分。这不仅限于简单的语法补全;更重要的是它可以提供建议来创建新的类、方法定义以及其他复杂的程序组件。例如: ```python def bubble_sort(arr): n = len(arr) for i in range(n): # 外层循环控制遍历次数 swapped = False for j in range(0, n-i-1): # 内层循环负责相邻元素比较交换 if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True if not swapped: break return arr ``` 上述例子展示了如何利用 Python 实现冒泡排序算法。虽然这段代码并不复杂,但在实际项目中遇到更为棘手的问题时,Copilot 可以为用户提供有价值的思路启发和支持。 ### 提高效率的小贴士 除了基本的功能外,还有一些技巧可以帮助更好地发挥其潜力。例如,可以通过自然语言描述需求让 Copilot 自动生成相应代码片段;也可以自定义快捷键以便快速访问常用命令等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值