[数据安全] 一个简洁快速的去数据特征的混淆算法(obfuscate)

2023-10-17 16:10

本文主要是介绍[数据安全] 一个简洁快速的去数据特征的混淆算法(obfuscate),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[注]本文为作者原创文章,转载请注明出处。谢谢。 

 

问题1,什么是特征

  这个人长个马脸,那个妹子胸大,这都是特征。显然,特征越明显,我们越容易对其进行辨识。

问题2,什么是数据特征

  数据特征,就是说,某段数据具有的特征。

    比如,通迅的双方(A <-> B ),在建立连接后,A发给B的第一个包,长度总是固定的,有时候甚至值都是固定的(在协议握手阶段尤其如此)。 

问题3,为什么要去掉这些特征

  我们在讲网络安全的时候,绝大部分的人能想到数据加密,然而仅仅加密还不足于保护我们的。下面我举几个例子。

    1,某FW在对数据包进行检测的时候,可以通过特征的学习及辨识去决定要不要reset这个连接。

    2,浏览网站时产生的流量数据,带有明显的网页字节数特征,通过对这个特征的学习,第三方可以大概知道浏览网站的人都访问过哪些网站,甚至知道访问了哪些页面。 

问题4,怎么去数据特征

  通过粗略的分析,我们至少有两个办法可以使数据特征不明显。

    1,改变数据长度。主要通过在数据流中加入一些随机长度的随机值。

    2,通过增加冗余位,增加数据中具体位的随机性。 

一种冗余位Obfuscate方案

  我们知道一个字节通常由8个bit组成。确定的值,它的bit平面(低位到高位所呈现的0101序列)总是确定的。如果我们让这个确定变成不确定,我们的目的就达成了。

  下面,我介绍一个简单的通过冗余位达到混扰的目的。

  以uint8_t -> uint32_t 为实例进行一个大概的算法描述  

  uint8_t   占8bit

  uint32_t   占32bit  

  uint8_t中

    01位置于uint32_t 第一个byte,

    23位置于uint32_t第二个byte,

    45位置于uint32_t第三个byte,

    67位置于uint32_t第四byte

 

    具体的算法:

     取uint32_t中每个byte的高3位,得到一个数值p, p mod 5 = z, z就是这个byte中起始有效bit位,从这个位开始,顺序存储(从底位到高位)2个uint8_t中的位 (见下图)

   

  

 C代码实现

//UINT_X's width must be less than sizeof(uint32_t), it can be uint8_t or , uint16_t
template <typename UINT_X>
inline static uint32_t obfuscate(UINT_X const& val, uint32_t const& r_u32) {if (sizeof(uint32_t) <= sizeof(UINT_X)) return val;uint32_t rr = 0;uint8_t b[sizeof(UINT_X) * 8];uint8_t bii[sizeof(UINT_X) * 8];//per bytes contain bit countuint8_t pbcbc = (sizeof(UINT_X) * 8) / (sizeof(uint32_t) / sizeof(uint8_t));for (int i = 0; i < (sizeof(UINT_X) * 8); i++) {if ((i%pbcbc) == 0) {b[i] = ((r_u32 >> ((5 + ((i / pbcbc) << 3))) & 0x7) % 5) & 0xFF;bii[i] = b[i];} else {b[i] = ((b[i - 1] + 1) % 5);bii[i] = bii[i - 1];}uint8_t bi = 0;if (val&(0x01 << i)) {bi |= (0x01 << b[i]);}bi |= ((0x7 & bii[i]) << 5);rr |= ((0xFFFFFFFF & bi) << ((i / pbcbc) << 3));}return rr;
}template <typename UINT_X>
inline static UINT_X deobfuscate(uint32_t const& val) {UINT_X r = 0;uint8_t pbcbc = (sizeof(UINT_X) * 8) / (sizeof(uint32_t) / sizeof(uint8_t));UINT_X b[sizeof(UINT_X) * 8];for (int i = 0; i < (sizeof(UINT_X) * 8); i++) {if ((i%pbcbc) == 0) {b[i] = ((val >> ((5 + ((i / pbcbc) << 3))) & 0x7) % 5) & 0xFF;} else {b[i] = ((b[i - 1] + 1) % 5);}r |= (((val >> (b[i] + ((i / pbcbc) << 3))) & 0x1) << i);}return r;
}namespace wawo { namespace security {inline static uint32_t u8_obfuscate(uint8_t const& val, uint32_t const& r_u32) {return obfuscate<uint8_t>(val,r_u32);}inline static uint32_t u16_obfuscate(uint16_t const& val, uint32_t const& r_u32) {return obfuscate<uint16_t>(val, r_u32);}inline static uint8_t u8_deobfuscate(uint32_t const& val) {return deobfuscate<uint8_t>(val);}inline static uint16_t u16_deobfuscate(uint32_t const& val) {return deobfuscate<uint16_t>(val);}
}}

  

  

 

   

 

 

 

 

    

转载于:https://www.cnblogs.com/copys/p/5568169.html

这篇关于[数据安全] 一个简洁快速的去数据特征的混淆算法(obfuscate)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226498

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖