CryptDB代码分析5-底层加密库与加密层
CryptDB要进行数据加密,需要实现具体的加密算法,然后使用加密层类型来进行封装。如果用户想在其上实现新的功能,一方面需要实现加密算法,一方面要添加加密层以及其他相关辅助结构。本文介绍这两者之间的一些接口设计,方便大家基于现有代码做实验。
CryptDB要进行数据加密,需要实现具体的加密算法,然后使用加密层类型来进行封装。如果用户想在其上实现新的功能,一方面需要实现加密算法,一方面要添加加密层以及其他相关辅助结构。本文介绍这两者之间的一些接口设计,方便大家基于现有代码做实验。
之前介绍了CryptDB中元数据管理相关的类,以及这些类在MySQL中的存储格式。本文介绍这些元数据是什么时候创建的,在什么时候通过什么方式写入数据库,在什么时候被读取,以及元数据在什么地方被使用。
本文是CryptDB代码分析的第三篇。在CryptDB中,需要对加密过程进行记录:比如某个表的原始名字和加密以后的名字,表中有多少列,每列用了什么样的加密算法。这些信息被记录在mysql-proxy端的embedded MySQL中。CryptDB使用了元数据管理的模块处理这些信息,相关代码主要位于main/dbobject.hh以及main/schema.cc。
之前已经介绍了SQL语句经过mysql-proxy的lua脚本与C++库交互的过程。在CryptDB的处理中,总体分为两个阶段:rewrite与next。本文介绍在rewrite和next这两个阶段中比较重要的两个类层次:handler以及executor。
之前的文章 ”CryptDB原理概述“ 介绍了CryptDB的基本原理,接下来从代码的角度介绍其实现原理。本文首先关注mysql-proxy的lua脚本与CryptDB加密库的交互过程。
Cryptdb[1]是MIT的CSAIL 在11年sosp上提出的, 其在数据库上实现了同态加密技术. 本文基于一些相关文献, 以及对代码的调研, 对该系统的实现原理以及相关的技术做介绍.
Redis通过IO复用以及单线程模型来处理客户端请求, 其基于epoll,select,kqueue,以及evport封装了自己的事件处理库ae_event. 这个库的作用是监听多个socket描述符,在描述符上产生读写事件的时候,调用相应的函数进行处理. 具体来说,如果socket可读,则读取数据,进行命令解析,并且将命令回复写到输出缓冲区. 如果socket可写,则将输出缓冲区中的数据通过socket发送给客户端. 此外,还可以借助这个库完成固定时间间隔执行某个函数的功能. 本文首先给出一个实际使用的简单例子,然后基于这个例子介绍相关的API以及其内部的实现原理.
最近在开源代码中发现了一种不修改代码的情况下, 访问库中的类的私有成员变量的方法. 我们知道, 一个类的成员变量设置成private, 外部函数一般通过友元才能访问. 但是库已经写好了, 在不修改库的代码, 为其添加友元的情况下, 也可以使用一些特殊技巧访问类的私有成员.
为了介绍这个方法, 首先介绍一些C++中的特性, 如下.
MySQL除了CS运行模式, 还有embedded模式. 相关文档介绍比较少,也比较散乱, 最近项目中正好用到, 现通过本文对其基本用法做个介绍,给出可以运行的基本例子.本文基于mysql5.5.
cscope是一种代码阅读工具, 跟ctags比, 优点是可以查询调用某个函数的有哪些函数. 本文基于参考文献, 整理其基本使用方法, 方便快速查询, 本文测试环境是Ubuntu16.04.