V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  程序员

如何让一个文件永远携带一个信息,并且不可更改,不影响该文件正常使用?

  •  
  •   tctc4869 · 2020-06-07 16:43:29 +08:00 · 9012 次点击
    这是一个创建于 1628 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。对一个文件内部写入一个字符串信息,并且写入后,无法再次写入,不可更改。或者让更改难度难度很大,就像破解反编译 c++一样

    不会影响到文件的使用,切换了操作系统也不会发生改变。至少能包含大多数文件格式,文本文件,图片,文档文件等,能被程序读取写入的信息。专业性质的文件不包括在内。

    如何做到?用什么工具?或者什么编程开发语言能做到

    第 1 条附言  ·  2020-06-07 17:51:50 +08:00
    更改一下要求吧:要让 pdf ,图片文件,视频文件,音频文件携带一个字符串信息,不影响用户使用该文件。能否被更改是次要的。不过至少不能被轻易修改。
    66 条回复    2020-06-10 11:24:25 +08:00
    mingl0280
        1
    mingl0280  
       2020-06-07 16:45:09 +08:00 via Android
    签名
    LnTrx
        2
    LnTrx  
       2020-06-07 16:45:57 +08:00
    PDF+数字签名?
    retanoj
        3
    retanoj  
       2020-06-07 16:46:30 +08:00 via iPhone
    如果对“文件”所在环境没有限制,那好像是无解的
    mingl0280
        4
    mingl0280  
       2020-06-07 16:49:46 +08:00 via Android
    @retanoj 对,离线文件无论如何做反修改都没啥用,签名+联网验证是唯一的解决方案
    hello2060
        5
    hello2060  
       2020-06-07 16:53:02 +08:00
    文件就是一堆二进制数据,不可能无法编辑的。也就是说数据肯定可以被破坏。那你打开的时候必须判断文件是否有效,无效肯定就不打开了,所以不存在不影响使用的问题。
    tctc4869
        6
    tctc4869  
    OP
       2020-06-07 16:57:42 +08:00
    @retanoj 如果就考了一个操作系统呢?比如只在 Windows 上
    nguoidiqua
        7
    nguoidiqua  
       2020-06-07 16:58:27 +08:00   ❤️ 7
    你想想别人大费周章搞区块链、搞共识算法到底是为什么?

    因为没有这样的技术。
    retanoj
        8
    retanoj  
       2020-06-07 17:04:42 +08:00 via iPhone
    @tctc4869
    那感觉可以参考已存在的各种“数据防泄密( DLP )”系统
    nightwitch
        9
    nightwitch  
       2020-06-07 17:09:37 +08:00
    GPG 对文件进行签名, 在其他系统上验签后提取文件。
    reus
        10
    reus  
       2020-06-07 17:13:50 +08:00
    做不到
    neteroster
        11
    neteroster  
       2020-06-07 17:24:52 +08:00 via Android
    「对一个文件内部写入一个字符串信息,并且写入后,无法再次写入,不可更改。」做不到。
    能做到的是用类似 GPG 的软件签名,确保数据被更改后能被发现。
    systemcall
        12
    systemcall  
       2020-06-07 17:30:32 +08:00
    感觉不行
    如果是做 DRM 的话,倒是可以考虑数字水印。别的东西就不太清楚了。
    如果是公司里面用,有很多保密系统可以考虑。可以控制硬件的情况下,也有很多方法,发现破解了就 ban 机
    jugelizi
        13
    jugelizi  
       2020-06-07 17:32:57 +08:00
    说下你的原始需求 感觉你的想法已经偏离了
    Leon6868
        14
    Leon6868  
       2020-06-07 17:36:27 +08:00
    如果对于文本文档,这个问题好像无解,因为文档在可视层面是可以直接复制的
    只能增加发现和修改水印的难度(比如无宽字符)

    视频的话,还可以用一下水印,不过也只能增加破解难度
    CNife
        15
    CNife  
       2020-06-07 17:44:18 +08:00   ❤️ 1
    你要的是类似水印的功能,一般只能针对特定用途、特定数据类型专门定制,很难搞一个通用的。
    比如,图片的水印就是图片携带的,很难更改(除非用专门的去水印算法和工具),不影响图片的使用(人在看图片时可以「手动」忽略水印,只关注图片本身)。
    我有一个学长,硕士毕业论文做的地图水印,同样需要针对地图,提取地物的特征来制作水印,再嵌入到地图里,做到既不被普通用户发现,又能抵抗简化、旋转、放缩等去水印攻击。当然,具体的算法我也不懂,只是简单说一说水印功能的复杂性。
    像纯文本这样的文件就很难搞水印,因为所有数据都直接暴露给了用户,用户不需要任何额外工具就能看到文件每一个比特,改动任何一个字节的数据都能被用户发现。
    从信息的角度看,水印一定会改变原文件的信息量,扭曲原文件的信息,像视频、图片这样冗余信息量大、用户无法直接看到每一个字节的数据就容易做水印,但很难有一个通用的数据水印。
    dream7758522
        16
    dream7758522  
       2020-06-07 17:45:04 +08:00 via Android
    这不就是给文件加签名吗?无法再次写入,不可更改。
    xiangyuecn
        17
    xiangyuecn  
       2020-06-07 17:52:06 +08:00
    加上这个:“对一个文件内部写入一个字符串信息” 限制,无解。

    去掉这个:“对一个文件内部写入一个字符串信息” 限制,n 个解。

    简单点的计算文件 hash,一个文件写入后无法再次写入==不可更改,更改难度奇大( md5 碰撞倒是有例子,sha1 文件不知道有没有例子),涵盖所有类型文件,任意主流操作系统兼容😂
    imn1
        18
    imn1  
       2020-06-07 17:56:54 +08:00
    “不能被轻易修改”,符合这条基本都是鉴权加密
    其他写入但不影响使用就很容易
    tctc4869
        19
    tctc4869  
    OP
       2020-06-07 17:57:03 +08:00
    @xiangyuecn md5 sha1 与这个无关。我的是把文件内塞入签名信息。
    tctc4869
        20
    tctc4869  
    OP
       2020-06-07 18:03:59 +08:00
    @CNife 好吧,如果缩小范围,只考虑图片文件,视频文件,pdf 文件,epub,音频文件,只考虑这些的话,那有软件能做么?我是说塞入字符串去,然后又能被读出来,有相关软件么?
    youla
        21
    youla  
       2020-06-07 18:24:26 +08:00   ❤️ 1
    写一个 exe 程序,把你的图片视频 pdf 装进去。
    liuser666
        22
    liuser666  
       2020-06-07 18:53:15 +08:00 via iPhone
    在线查看,远程给文档,图片,pdf 你把文件放 csn 里。
    liuser666
        23
    liuser666  
       2020-06-07 18:53:57 +08:00 via iPhone
    cdn
    dream10201
        24
    dream10201  
       2020-06-07 19:18:19 +08:00
    洗洗睡不香?
    Mac
        25
    Mac  
       2020-06-07 19:19:58 +08:00 via Android
    当年软盘时代有写保护口
    aloxaf
        26
    aloxaf  
       2020-06-07 19:44:46 +08:00
    你需要的大概是数字盲水印
    Jooooooooo
        27
    Jooooooooo  
       2020-06-07 19:50:39 +08:00
    做不到

    楼上好多答案说的都是怎么发现被改的

    你想想, 文件就是本地磁盘上的数据, 有管理员权限之后还有啥不能改?
    acess
        28
    acess  
       2020-06-07 19:59:42 +08:00
    @CNife 很多年前听说过有些小说网站会替换一些不太重要的字词来嵌入水印,这样就可以在小说泄露(盗版)后追踪到泄露出去的用户。
    pusheax
        29
    pusheax  
       2020-06-07 20:01:10 +08:00
    这种多媒体数据的话可以考虑隐写,也不是完全不能更改,但是很难以发现
    LengthMin
        30
    LengthMin  
       2020-06-07 20:02:48 +08:00
    楼主是想做一个泄露查询吗? 给某个文件加上一个独特的密钥 泄露之后就可以知道是谁泄露的
    reus
        31
    reus  
       2020-06-07 20:03:13 +08:00
    @acess 拿到两个不同用户的文本,做一个 diff,把不同的地方删除,就可以去掉特征了
    llh880808
        32
    llh880808  
       2020-06-07 20:33:25 +08:00
    有人记得图种吗,利用操作系统根据文件头判断文件类型的机制,把信息夹带在文件尾,也不影响正常浏览,如果信息量很小,在文件大小上也看不出来
    问题是一旦知道这种方法,当然还是可以编辑夹带的信息
    tctc4869
        33
    tctc4869  
    OP
       2020-06-07 21:38:31 +08:00
    @LengthMin 是的
    tctc4869
        34
    tctc4869  
    OP
       2020-06-07 21:39:26 +08:00
    @llh880808 可以字符串加密信息,塞入文件里的是加密的字符串
    tctc4869
        35
    tctc4869  
    OP
       2020-06-07 21:45:11 +08:00
    @pusheax 这种有相关软件么?自己把一些信息进行对称加密,然后把加密的字符串信息塞入多媒体文件,pdf 文件里。这样用户就难以发现,
    beastk
        36
    beastk  
       2020-06-07 21:47:15 +08:00 via iPhone
    哪有永远的事,你想多了
    niubee1
        37
    niubee1  
       2020-06-07 21:47:15 +08:00
    你说的不是 EXIF 信息 ?
    BadAngel
        38
    BadAngel  
       2020-06-07 21:48:17 +08:00
    突然想到,如果可以这么做,放入病毒也是可以的咯?
    而且还是全平台?
    这个有点离谱了。
    xcstream
        39
    xcstream  
       2020-06-07 21:49:41 +08:00
    其实就是水印 随便找个软件就可以了
    la9998372
        40
    la9998372  
       2020-06-07 21:57:00 +08:00
    图片、PDF 文件上,可以加数字水印。而且这种数字水印可以在截图、翻拍等情况下,也可以实现恢复。https://www.jianshu.com/p/08041bcf0f23
    la9998372
        41
    la9998372  
       2020-06-07 22:01:28 +08:00   ❤️ 1
    可以看看这个实际使用案例 https://www.amobbs.com/thread-5732994-1-1.html
    fensou
        42
    fensou  
       2020-06-07 22:06:46 +08:00 via iPhone
    搞安全的都知道这手艺
    catror
        43
    catror  
       2020-06-07 22:08:04 +08:00 via Android
    你要求塞入文件的话,没有通用的方法,不同格式有不同的文件结构。
    feelapi
        44
    feelapi  
       2020-06-07 22:08:34 +08:00
    猜测一下,又是那个领导拍脑袋想的需求吧。
    aa6563679
        45
    aa6563679  
       2020-06-07 22:11:52 +08:00 via iPhone
    文件往后面追加数据是不会影响使用的
    webshe11
        46
    webshe11  
       2020-06-07 22:57:41 +08:00   ❤️ 2
    楼主没有提存储介质,给一个方法: 光盘
    mumbler
        47
    mumbler  
       2020-06-07 23:09:05 +08:00 via Android
    EXE 文件啊,有个资源区,可以把内容写进去,要改的话很麻烦
    yujiang
        48
    yujiang  
       2020-06-08 00:02:57 +08:00 via Android
    想起了 fb 在用户上传的图片里加数据用来追踪。。。
    helloworld000
        49
    helloworld000  
       2020-06-08 02:51:47 +08:00
    区块链啊
    yufeng0681
        50
    yufeng0681  
       2020-06-08 08:52:13 +08:00
    肉眼不可见的水印技术, 主要是打上标记,看看是谁在传播,泄密 机密文件
    p1gd0g
        51
    p1gd0g  
       2020-06-08 09:13:16 +08:00
    数字水印,密码学有这个方向。
    BadAngel
        52
    BadAngel  
       2020-06-08 09:34:11 +08:00
    1 、你需要把有效内容包裹起来,使用特定格式,只有特定应用才能打开,但需要对全平台都开发应用,而且破解这种事情只要有心总能够做到。

    2 、把问题分开看,对不同类型的文件使用不同的隐形加密技术。
    图片类:在某个范围内,加入隐形水印信息,类似起点防盗版。
    视频类:在视频里某一帧加入校验图,类似拳击俱乐部里的丁丁。
    文档类:PDF 用的数字签名,前面有人提到过了。
    hugedata
        53
    hugedata  
       2020-06-08 09:57:23 +08:00
    数字水印,不很多公司内部系统包括 web 页面、通知公告等都加了数字水印了么,防止盗摄、截屏等,只要网上泄露内部资料,立马就能追踪到是谁泄露的。
    mostkia
        54
    mostkia  
       2020-06-08 10:22:17 +08:00
    用你自己开发的压缩算法,吧文件打包成一个 exe 或任意一种可执行文件。内置打开的程序,不向系统输出内部的资源文件。
    hws8033856
        55
    hws8033856  
       2020-06-08 10:38:42 +08:00
    LZ 你需要的是抗攻击的水印,不同媒体有不同的算法,没有通用的
    msg7086
        56
    msg7086  
       2020-06-08 11:15:04 +08:00
    没什么是不能改的。你是电脑的拥有者,你对电脑内的所有东西都有最高权限。
    最简单的,一锤子下去,文件是不是被改变了?不仅能被改变,还能被销毁被鞭尸。
    hejw19970413
        57
    hejw19970413  
       2020-06-08 11:35:03 +08:00
    我试过往一张图片中加入自己的字符(在最后面的尾部),在图片展示上其实是没有什么影响的。其实就像一个木马图片一样
    bibsbx
        58
    bibsbx  
       2020-06-08 11:51:12 +08:00
    如果可以都压缩成.zip 的话,可以试试 File comment
    iszengmh
        59
    iszengmh  
       2020-06-08 11:55:43 +08:00 via Android
    不太可能吧,要是这样的话,为什么下载强调验证文件完整性
    yolee
        60
    yolee  
       2020-06-08 14:01:26 +08:00
    只要是数据就能更改,无法更改的文件是不存在的。唯一的方案是:自定义文件格式,用自己专有的软件才能解码,还可以加入云端验证。
    hikari2
        61
    hikari2  
       2020-06-08 14:48:15 +08:00
    在源代码添加注释吧,做一个简单.exe 或者.apk 程序,然后反编译,找到注释的位置。
    wmhx
        62
    wmhx  
       2020-06-08 14:55:04 +08:00
    电子签名法,CFCA 了解下。
    newmlp
        63
    newmlp  
       2020-06-08 17:17:54 +08:00
    不可能
    lululau
        65
    lululau  
       2020-06-08 18:22:25 +08:00
    咋就不可能,自己开发个操作系统呗
    annielong
        66
    annielong  
       2020-06-08 18:32:33 +08:00
    exe 文件倒是可以先效验,可以判断文件是否被修改过,图片,视频等本身是无法判断的,
    magicfuzzx
        67
    magicfuzzx  
       2020-06-10 11:24:25 +08:00
    说了这么多,你们觉得怎么给 txt 加一个签名,纯文本哦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5641 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 01:39 · PVG 09:39 · LAX 17:39 · JFK 20:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.