软件水印与心脏病预测的技术探索
软件水印技术
常见软件水印方法
- 基于路径的水印方法 :选择源代码中的分支来嵌入水印。运行程序时使用秘密输入,追踪基本块的执行。利用中国剩余定理将水印拆分为两部分,并通过块密码处理。根据密钥将水印代码作为分支嵌入源程序。提取时,使用秘密输入运行程序并分析分支以恢复水印。
- 基于函数依赖的水印方法 :将水印编码在函数序列中,修改源代码中的函数顺序来嵌入水印,适用于 C、C++ 程序。选择独立函数,根据水印位添加虚假函数调用。
- 基于哈希函数的水印方法 :构造包含水印的特殊哈希函数并嵌入源代码。先使用中国剩余定理将水印编码为不同单元,运行代码获取常量序列,构造四参数哈希函数并转换为代码嵌入。提取时通过秘密输入追踪函数调用,从返回值计算水印,但存在哈希函数易被识别的缺点。
- 基于支持向量机的水印方法 :使用支持向量机(SVM)进行非隐形水印嵌入,将水印信息作为知识嵌入训练好的 SVM 中,添加到源代码的候选条件语句中。SVM 的部分输出位包含水印信息,通过动态分析工具在运行时提取。
- Xmark 水印方法 :一种动态软件水印方案,利用 Collatz 猜想在程序的条件构造中嵌入水印,通过循环插桩和分支追踪来提取水印。
相关背景知识
- Collatz 猜想 :对于任何正整数 n,定