Watermark工具
该工具有两个功能:
- IoTDB查询结果的Watermark嵌入
- 可疑数据的Watermark检测
1. Watermark嵌入
1.1 配置
默认情况下,IoTDB中的Watermark处于禁用状态。要启用Watermark嵌入,首先要修改配置文件中的以下字段:iotdb-engine.properties
名字 | 例 | 解释 |
watermark_module_opened | 假 |
|
watermark_secret_key | 碘丁苯*2019@Beijing | 自定义密钥 |
watermark_bit_string | 100101110100 | 要嵌入的 0-1 位字符串 |
watermark_method | GroupBasedLSBMethod(embed_row_cycle=2,embed_lsb_num=5) | 指定水印算法及其参数 |
笔记:
watermark_module_opened
:如果要启用Watermark嵌入,请将其设置为 truewatermark_secret_key
:不允许使用字符“&”。对密钥的长度没有限制。一般来说,密钥越长,入侵者的门槛就越高。watermark_bit_string
:位字符串的长度没有限制(除了它不应该为空)。但请注意,如果位串太短,则很难在水印检测阶段达到所需的显著性级别。watermark_method
:现在只支持基于组的LSBMethod,所以实际上你只能调整此方法的两个参数,即和。embed_row_cycle
embed_lsb_num
- 它们都应该是正整数。
embed_row_cycle
控制带水印的行的比例。越小,带水印的行的比例越大。当等于 1 时,每一行都有水印。embed_row_cycle
embed_row_cycle
- GroupBasedLSBMethod使用LSB嵌入。 控制可用于水印嵌入的最低有效位数。越大,数据点的变化范围越大。
embed_lsb_num
embed_lsb_num
watermark_secret_key
,并且应对可能的攻击者保密。也就是说,您有责任照顾.watermark_bit_string
watermark_method
iotdb-engine.properties
1.2 使用示例
第 1 步:创建新用户 Alice,授予读取权限和查询
默认情况下,新创建的用户不使用水印。所以查询结果是原始数据。
.\start-client.bat -u root -pw root
create user Alice 1234
grant user Alice privileges 'READ_TIMESERIES' on root.vehicle
exit
.\start-client.bat -u Alice -pw 1234
select * from root
+-----------------------------------+------------------+
| Time|root.vehicle.d0.s0|
+-----------------------------------+------------------+
| 1970-01-01T08:00:00.001+08:00| 21.5|
| 1970-01-01T08:00:00.002+08:00| 22.5|
| 1970-01-01T08:00:00.003+08:00| 23.5|
| 1970-01-01T08:00:00.004+08:00| 24.5|
| 1970-01-01T08:00:00.005+08:00| 25.5|
| 1970-01-01T08:00:00.006+08:00| 26.5|
| 1970-01-01T08:00:00.007+08:00| 27.5|
| 1970-01-01T08:00:00.008+08:00| 28.5|
| 1970-01-01T08:00:00.009+08:00| 29.5|
| 1970-01-01T08:00:00.010+08:00| 30.5|
| 1970-01-01T08:00:00.011+08:00| 31.5|
| 1970-01-01T08:00:00.012+08:00| 32.5|
| 1970-01-01T08:00:00.013+08:00| 33.5|
| 1970-01-01T08:00:00.014+08:00| 34.5|
| 1970-01-01T08:00:00.015+08:00| 35.5|
| 1970-01-01T08:00:00.016+08:00| 36.5|
| 1970-01-01T08:00:00.017+08:00| 37.5|
| 1970-01-01T08:00:00.018+08:00| 38.5|
| 1970-01-01T08:00:00.019+08:00| 39.5|
| 1970-01-01T08:00:00.020+08:00| 40.5|
| 1970-01-01T08:00:00.021+08:00| 41.5|
| 1970-01-01T08:00:00.022+08:00| 42.5|
| 1970-01-01T08:00:00.023+08:00| 43.5|
| 1970-01-01T08:00:00.024+08:00| 44.5|
| 1970-01-01T08:00:00.025+08:00| 45.5|
| 1970-01-01T08:00:00.026+08:00| 46.5|
| 1970-01-01T08:00:00.027+08:00| 47.5|
| 1970-01-01T08:00:00.028+08:00| 48.5|
| 1970-01-01T08:00:00.029+08:00| 49.5|
| 1970-01-01T08:00:00.030+08:00| 50.5|
| 1970-01-01T08:00:00.031+08:00| 51.5|
| 1970-01-01T08:00:00.032+08:00| 52.5|
| 1970-01-01T08:00:00.033+08:00| 53.5|
+-----------------------------------+------------------+
第 2 步:授予watermark_embedding
用法:grant watermark_embedding to Alice
请注意,您可以使用 向多个用户授予watermark_embedding。grant watermark_embedding to user1,user2,...
只有 root 可以运行此命令。将根权限watermark_embedding给 Alice 后,Alice 的所有查询结果都会加Watermark。
.\start-client.bat -u root -pw root
grant watermark_embedding to Alice
exit
.\start-client.bat -u Alice -pw 1234
select * from root
+-----------------------------------+------------------+
| Time|root.vehicle.d0.s0|
+-----------------------------------+------------------+
| 1970-01-01T08:00:00.001+08:00| 21.5|
| 1970-01-01T08:00:00.002+08:00| 22.5|
| 1970-01-01T08:00:00.003+08:00| 23.500008|
| 1970-01-01T08:00:00.004+08:00| 24.500015|
| 1970-01-01T08:00:00.005+08:00| 25.5|
| 1970-01-01T08:00:00.006+08:00| 26.500015|
| 1970-01-01T08:00:00.007+08:00| 27.5|
| 1970-01-01T08:00:00.008+08:00| 28.500004|
| 1970-01-01T08:00:00.009+08:00| 29.5|
| 1970-01-01T08:00:00.010+08:00| 30.5|
| 1970-01-01T08:00:00.011+08:00| 31.5|
| 1970-01-01T08:00:00.012+08:00| 32.5|
| 1970-01-01T08:00:00.013+08:00| 33.5|
| 1970-01-01T08:00:00.014+08:00| 34.5|
| 1970-01-01T08:00:00.015+08:00| 35.500004|
| 1970-01-01T08:00:00.016+08:00| 36.5|
| 1970-01-01T08:00:00.017+08:00| 37.5|
| 1970-01-01T08:00:00.018+08:00| 38.5|
| 1970-01-01T08:00:00.019+08:00| 39.5|
| 1970-01-01T08:00:00.020+08:00| 40.5|
| 1970-01-01T08:00:00.021+08:00| 41.5|
| 1970-01-01T08:00:00.022+08:00| 42.500015|
| 1970-01-01T08:00:00.023+08:00| 43.5|
| 1970-01-01T08:00:00.024+08:00| 44.500008|
| 1970-01-01T08:00:00.025+08:00| 45.50003|
| 1970-01-01T08:00:00.026+08:00| 46.500008|
| 1970-01-01T08:00:00.027+08:00| 47.500008|
| 1970-01-01T08:00:00.028+08:00| 48.5|
| 1970-01-01T08:00:00.029+08:00| 49.5|
| 1970-01-01T08:00:00.030+08:00| 50.5|
| 1970-01-01T08:00:00.031+08:00| 51.500008|
| 1970-01-01T08:00:00.032+08:00| 52.5|
| 1970-01-01T08:00:00.033+08:00| 53.5|
+-----------------------------------+------------------+
第 3 步:撤销atermark_embedding
用法:revoke watermark_embedding from Alice
请注意,您可以使用 撤消多个用户的watermark_embedding。revoke watermark_embedding from user1,user2,...
只有 root 可以运行此命令。根从 Alice 撤销watermark_embedding后,Alice 的所有查询结果再次为原始结果。
2. Watermark检测
detect-watermark.sh
并为不同的平台提供。detect-watermark.bat
用法: ./detect-watermark.sh [文件路径] [秘密键] [水印位字符串] [embed_row_cycle] [embed_lsb_num] [alpha] [columnIndex] [数据类型: int/float/double]
示例:./detect-watermark.sh /home/data/dump1.csv IoTDB*2019@Beijing 100101110100 2 5 0.05 1 浮点数
参数 | 例 | 解释 |
文件路径 | /home/data/dump1.csv | 可疑数据文件路径 |
秘密密钥 | 碘丁苯*2019@Beijing | 请参阅水印嵌入部分 |
水印位字符串 | 100101110100 | 请参阅水印嵌入部分 |
embed_row_cycle | 2 | 请参阅水印嵌入部分 |
embed_lsb_num | 5 | 请参阅水印嵌入部分 |
阿尔法 | 0.05 | 显著性水平 |
列索引 | 1 | 指定要检测的一列数据 |
数据类型 | 浮 | 指定检测到的列的数据类型;整数/浮点数/双精度 |
注意:
filePath
:您可以使用导出-csv工具生成此类数据文件。第一行是标题,第一列是时间。文件中的数据如下所示:
时间 | root.vehicle.d0.s1 | root.vehicle.d0.s1 |
1970-01-01T08:00:00.001+08:00 | 100 | 零 |
... | ... | ... |
watermark_secret_key
、 ,并且应与嵌入阶段中使用的一致。watermark_bit_string
embed_row_cycle
embed_lsb_num
alpha
:它应该在 [0,1] 的范围内。水印检测基于显著性检验。越小,检测出没有水印的数据被嵌入水印的概率越低,因此检测数据中是否存在水印的结果的可信度就越高。alpha
columnIndex
:它应该是一个正整数。