配置

    IoTDB默认关闭水印嵌入功能。为了使用这个功能,第一步要做的事情是修改配置文件中的以下各项:

    注意:

    • watermark_module_opened: 如果您想使用水印嵌入功能,请将其设置成true
    • watermark_secret_key: 不能使用字符 ‘&’。密钥长度没有限制,一般来说密钥越长,攻击难度就越高。
    • watermark_bit_string: 比特串长度没有限制(除了不能为空字符串),但是当长度过短时,水印检测可能达不到要求的显著性水平。
    • watermark_method: 现在仅支持一种算法GroupBasedLSBMethod,因此您实际上可以修改的只有这个算法的两个参数embed_row_cycleembed_lsb_num的值:
      • 均是正整数
      • embed_row_cycle控制了被嵌入水印的行占总行数的比例。embed_row_cycle越小,被嵌入水印的行的比例就越大。当embed_row_cycle等于1的时候,所有的行都将嵌入水印。
      • GroupBasedLSBMethod使用LSB嵌入。embed_lsb_num控制了允许嵌入水印的最低有效位的数量。embed_lsb_num越大,数值的可变化范围就越大。
    • watermark_secret_key, watermark_bit_stringwatermark_method都不应该被攻击者获得。您需要自己负责配置文件iotdb-engine.properties的安全管理。

    使用示例

    • 第一步:创建一个新用户Alice,授予读权限,然后查询

    一个新创建的用户默认不使用水印。因此查询结果就是数据库中的原始数据。

    • 第二步:给Alice施加水印嵌入

    sql用法:grant watermark_embedding to Alice

    只有root用户有权限运行该指令。在root给Alice施加水印嵌入之后,Alice的所有查询结果都将被嵌入水印。

    1. .\start-cli.bat -u root -pw root
    2. grant watermark_embedding to Alice
    3. exit
    4. select * from root
    5. +-----------------------------------+------------------+
    6. | Time|root.vehicle.d0.s0|
    7. +-----------------------------------+------------------+
    8. | 1970-01-01T08:00:00.001+08:00| 21.5|
    9. | 1970-01-01T08:00:00.002+08:00| 22.5|
    10. | 1970-01-01T08:00:00.003+08:00| 23.500008|
    11. | 1970-01-01T08:00:00.004+08:00| 24.500015|
    12. | 1970-01-01T08:00:00.005+08:00| 25.5|
    13. | 1970-01-01T08:00:00.006+08:00| 26.500015|
    14. | 1970-01-01T08:00:00.007+08:00| 27.5|
    15. | 1970-01-01T08:00:00.008+08:00| 28.500004|
    16. | 1970-01-01T08:00:00.009+08:00| 29.5|
    17. | 1970-01-01T08:00:00.010+08:00| 30.5|
    18. | 1970-01-01T08:00:00.011+08:00| 31.5|
    19. | 1970-01-01T08:00:00.012+08:00| 32.5|
    20. | 1970-01-01T08:00:00.013+08:00| 33.5|
    21. | 1970-01-01T08:00:00.014+08:00| 34.5|
    22. | 1970-01-01T08:00:00.015+08:00| 35.500004|
    23. | 1970-01-01T08:00:00.016+08:00| 36.5|
    24. | 1970-01-01T08:00:00.017+08:00| 37.5|
    25. | 1970-01-01T08:00:00.019+08:00| 39.5|
    26. | 1970-01-01T08:00:00.021+08:00| 41.5|
    27. | 1970-01-01T08:00:00.022+08:00| 42.500015|
    28. | 1970-01-01T08:00:00.023+08:00| 43.5|
    29. | 1970-01-01T08:00:00.024+08:00| 44.500008|
    30. | 1970-01-01T08:00:00.025+08:00| 45.50003|
    31. | 1970-01-01T08:00:00.026+08:00| 46.500008|
    32. | 1970-01-01T08:00:00.027+08:00| 47.500008|
    33. | 1970-01-01T08:00:00.028+08:00| 48.5|
    34. | 1970-01-01T08:00:00.029+08:00| 49.5|
    35. | 1970-01-01T08:00:00.030+08:00| 50.5|
    36. | 1970-01-01T08:00:00.031+08:00| 51.500008|
    37. | 1970-01-01T08:00:00.032+08:00| 52.5|
    38. | 1970-01-01T08:00:00.033+08:00| 53.5|
    39. +-----------------------------------+------------------+
    • 第三步:撤销Alice的水印嵌入

    sql用法:revoke watermark_embedding from Alice

    您可以使用revoke watermark_embedding from user1,user2,...来同时撤销多个用户的水印嵌入。

    只有root用户有权限运行该指令。在root撤销Alice的水印嵌入之后,Alice的所有查询结果就又是数据库中的原始数据了。

    水印检测

    用法: ./detect-watermark.sh [filePath] [secretKey] [watermarkBitString] [embed_row_cycle] [embed_lsb_num] [alpha] [columnIndex] [dataType: int/float/double]

    示例: ./detect-watermark.sh /home/data/dump1.csv IoTDB*2019@Beijing 100101110100 2 5 0.05 1 float

    注意:

    • filePath: 您可以使用export-csv工具来生成这样的数据文件。第一行是表头, 第一列是时间列。文件中的数据示例如下:
    • watermark_secret_key, watermark_bit_string, embed_row_cycleembed_lsb_num应该和水印嵌入过程使用的值保持一致。