Saturday, September 06, 2008

动态语言python内存中敏感数据保护

程序员应该使敏感数据在内存中保留的时间尽可能地短,这样可以有效防止被入侵的系统中敏感数据从内存中被骇客拷贝走。
这就要求程序中在敏感数据被使用后,最快速度的被擦掉。C语言中一般的赋值语句只是修改指针指向,不能擦拭掉内存数据,需要类似这样的代码才行:
/* Overwrite a string with 0 until get to the null */
void erase_string(char *s) {
 while(*s) { *s++ = 0; }
}

在python里面,字符串类型不可变数据类型,不允许用户覆盖字符串任意部分,通过遍历字符进行赋值是无法做到擦拭内存数据的。
这样,就要求程序员在使用敏感信息的时候要把数据存放到可变类型例如list中,然而list中数据的删除或者添加或者覆盖的时候,后台总要偷偷的对list完全的进行复制,这样也不是安全的,需要动态的修改数据长度,动态覆盖数据:

def paranoid_add_character_to_list(ch, l):
  new_list = map(lambda x:0,l)
  new_list.append(ch)
  new_list = map(lambda x:x,l)
  l = map(lambda x:0,l)
  return new_list

Add a reaction

About You

Comment