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

准备模仿某洋葱做一个 P2P 的匿名网络

  •  
  •   noli · 2014-12-14 13:03:30 +08:00 · 7387 次点击
    这是一个创建于 3614 天前的主题,其中的信息可能已经有所发展或是发生改变。
    打算基于UDP再发明一个传输层:好处是不用再担心虚假的RST。

    然后网络节点之间加上认证机制:
    具体来说就是,每个节点为其他节点提供服务的时候,之间的往来报文必须提供某种数字签名,以防止大量的虚假节点破坏P2P网络功能。

    实现以后大家就可以不用买域名啦!
    47 条回复    2015-02-17 21:59:16 +08:00
    kttde
        1
    kttde  
       2014-12-14 13:29:33 +08:00   ❤️ 1
    虽然不是很懂,但貌似很强大,支持
    scyuns
        2
    scyuns  
       2014-12-14 13:41:09 +08:00
    感觉要火 留名 顺便求测试
    noli
        3
    noli  
    OP
       2014-12-14 13:44:35 +08:00
    其实我本人反而比较会怀疑会不会真的有人用~哈哈
    c4pt0r
        4
    c4pt0r  
       2014-12-14 13:49:06 +08:00
    基于 UDP 层的可靠连接这个事情可以参考一下 ARQ 协议, 而且应该有不少开源的实现。
    jybox
        5
    jybox  
       2014-12-14 13:51:12 +08:00
    liuchen9586
        6
    liuchen9586  
       2014-12-14 13:55:33 +08:00
    @noli 用肯定有人用,匿名手段永远不嫌多
    就怕安全措施被人破解神马的
    noli
        7
    noli  
    OP
       2014-12-14 13:59:22 +08:00
    @jybox 你认识 UDT 的作者吗? 貌似UDT的作者是个华人?
    wadezhao
        8
    wadezhao  
       2014-12-14 14:00:09 +08:00   ❤️ 1
    实现以后楼主后半辈子不愁吃饭啦!要么发财,要么牢饭…………………………
    yesicoo
        9
    yesicoo  
       2014-12-14 14:08:09 +08:00
    好高级的样子
    gamexg
        10
    gamexg  
       2014-12-14 14:13:26 +08:00
    和域名什么关系啊?
    ovear
        11
    ovear  
       2014-12-14 14:14:18 +08:00
    虽不明,但觉厉
    前排留名
    efi
        12
    efi  
       2014-12-14 14:17:13 +08:00 via Android
    洋葱路由作翻墙用,几年以前就失败了,因为叛徒问题无解。

    洋葱路由作匿名用,最近也失败了,丝绸之路被FBI两次轻易破获,就是一个大蜜罐。
    jybox
        13
    jybox  
       2014-12-14 14:24:15 +08:00
    @noli 不认识,但据说是的
    imn1
        14
    imn1  
       2014-12-14 14:36:31 +08:00
    LZ还是先搞好自己的身份再做这事吧,要么肉身在墙外,要么练好金钟罩铁布衫~

    @efi
    洋葱单独用确实很差,但如果作为 proxy chain 里面的一环,还是不错

    另:个人不觉得丝绸之路是直接 tor 被攻破,感觉钓鱼可能性更大

    但 tor 还是要很大的信任度,相互都是,曾有出口节点的提供者因为儿童色情被拘(好像最终无事释放),就是有人用 tor 访问儿童色情,数据出口就在他那里;而其他用户也要信任节点,毕竟数据都经过各个节点~
    noli
        15
    noli  
    OP
       2014-12-14 14:40:34 +08:00
    @gamexg P2P 网络用DHT就可以动态检索特定机器所在的公网位置。

    @efi 能给大家介绍一下 叛徒问题具体是个什么情况么?
    miyuki
        16
    miyuki  
       2014-12-14 14:44:42 +08:00 via Android
    支持lz
    icedx
        17
    icedx  
       2014-12-14 14:46:43 +08:00 via Android
    卧槽UDT 怎么传到V2 了...
    dmcxiaolee
        18
    dmcxiaolee  
       2014-12-14 15:05:39 +08:00
    支持一下,加油!
    Daniel65536
        19
    Daniel65536  
       2014-12-14 15:05:49 +08:00
    @noli 要用tor翻墙,首先你需要翻墙,和Goagent的现状一样。
    ryanking8215
        20
    ryanking8215  
       2014-12-14 15:10:54 +08:00
    @c4pt0r 我能说libnice和libjingle吗?
    efi
        21
    efi  
       2014-12-14 15:34:44 +08:00 via Android
    @noli 墙封锁洋葱的方法是:运行许多个原版洋葱客户端,统计代理流量经过的服务器地址,动态路由屏蔽那些地址。如何了解一个客户端是否给墙告密是无解的问题。叛徒问题出自数字水印的traitor tracing问题。
    @imn1 丝绸之路是NSA的流量分析给FBI提供的parallel construction。
    qop
        22
    qop  
       2014-12-14 15:48:00 +08:00
    想的自己好像还有一个域名 yangcongpi.com
    noli
        23
    noli  
    OP
       2014-12-14 16:00:06 +08:00
    @efi 我对这个问题想到的思路:

    1. 多条隧道分散流量
    2. 节点认证跟信任机制


    B1 B2 是墙内同侧的叛徒,会统计流量暴露正常的A2 A5 代理,

    A1->B1-- G--A2->A3
    / \
    S F T
    \ /
    A6<-B2--W --A5<-A4


    所以:
    1. 当流量分散得足够均匀的时候, A2, A5不显著。

    2. 如果 A1 是从 B1 处得知推荐的路由路径,当 B1推荐的路径不通,B1 的 信任度会下降,然后叛徒就暴露了。

    当然,墙还可以不断地构造新的 Betrayer ,但是新的 Betrayer必须不断取得其他节点信任,才能有流量经过,所以,墙必须破坏一部分这个匿名网络的同时,又建设一下这个网络,才能为干扰而继续存在。
    GeekGao
        24
    GeekGao  
       2014-12-14 16:04:10 +08:00
    lz先发个paper出来吧,这玩意说起来好说,但实现起来复杂度非常之高。有没有想过Tor为何不去实现你想的功能?
    GeekGao
        25
    GeekGao  
       2014-12-14 16:11:53 +08:00
    @efi 对于Silk Road 被封, 请问你是从哪得到的结论证明“丝绸之路是NSA的流量分析给FBI提供的...” ?
    还有,最初的Silk Road被抓貌似不是因为NSA网络流量分析,具体报道是有披露的额,如果那站长没办理一批假护照、没有在Stackoverflow上暴露出真实名字来,还会被抓么。
    efi
        26
    efi  
       2014-12-15 01:21:05 +08:00
    @GeekGao parallel construction
    diancpp
        27
    diancpp  
       2014-12-15 12:18:03 +08:00
    好高端的样子
    diancpp
        28
    diancpp  
       2014-12-15 12:18:13 +08:00
    好高端的样子!!
    ryd994
        29
    ryd994  
       2014-12-15 17:06:22 +08:00 via Android
    逗比,要数据不可伪造就要保证身份唯一性,保证了身份唯一性还叫什么匿名
    身份在此不一定就是现实身份,可以是任何账号,地址
    还有UDP包大小有限你考虑了么
    noli
        30
    noli  
    OP
       2014-12-15 19:59:24 +08:00
    @ryd994 PGP是什么知道么?你的辩证法学得不太好啊……保持匿名和身份验证根本不是一对矛盾。
    netsail
        31
    netsail  
       2014-12-15 22:55:27 +08:00
    很好很强大!
    ryd994
        32
    ryd994  
       2014-12-16 00:30:41 +08:00
    @noli 呵呵,PGP其实只能保证确实是由私钥持有人发出的。如果我生成一千对密钥,网络里不旧多了一千个虚假节点了么?
    noli
        33
    noli  
    OP
       2014-12-16 01:39:30 +08:00
    @ryd994 虚假与否并不在于它是不是持有一对密钥,而是这些节点有没有真正为P2P网络服务。所以必须引入类似BT里面的信任评分机制,没有为网络提供过服务的节点信任值很低,所以也不会被选中提供服务。
    ryd994
        34
    ryd994  
       2014-12-16 02:18:45 +08:00 via Android
    @noli 那你可以参考参考eMule什么结果
    事实上基本没用
    noli
        35
    noli  
    OP
       2014-12-16 02:29:07 +08:00
    @ryd994 据我所知, eMule没有提供身份认证,实际上你重装一次eMule 就失去了之前的身份。这当然没什么效果。

    而且,匿名网络和 eMule 不一样的地方在于,匿名网络不是分享文件,只需要基本的节点信息交换(代价小得多),这很大程度是一种互利行为,不参与节点信息交换的或者试图只收不发的节点,自然就不会获得credit,马太效应很快就会把这种节点甩到尘封的角落。
    ryd994
        36
    ryd994  
       2014-12-16 02:45:26 +08:00 via Android
    @noli 你并没有解决我一开始提出的问题,我可以无限引入新节点,除非你完全拒绝新节点,结果都是一样的。eMule就是这个问题

    开销大小是相对的,鉴于国内ADSL永远512k上传,根本就不可能存在对等互利
    noli
        37
    noli  
    OP
       2014-12-16 02:54:45 +08:00
    @ryd994 无限开新的节点,然后呢? 这些节点可以干嘛呢?新节点加入网络可以在评分算法上给予一定程度的照顾,然后在若干时间内没有为其他节点提供过任何服务或者提供无效的服务的话,那么这些节点在其他正常节点里面的评分自然就会下降。无限开这些新节点又怎么了呢?对于这个网络没有任何的破坏啊?

    没错,开销大小是相对的,512k上传,假设交换的全是IPv6地址,一秒都可以交换2K个以上的地址了。绰绰有余啦。一个匿名网络节点要为其他节点服务,提供2k多个其他节点绝对是慷慨了,而且这种慷慨只需要偶尔一次。
    ryd994
        38
    ryd994  
       2014-12-16 03:23:29 +08:00
    @noli 有新人基础信用就可以利用啊……
    在评分下降到0之前都可以坑人啊
    吸血驴就是靠不停换来吸血的

    我说的开销不是指协议开销,而是指提供的服务的成本。tor在国内没流行,一是因为运营商封锁,二是因为没上传。国内大多数人上传带宽都很有限,不可能提供有效的代理服务。tor匿名靠的就是互相传来传去。

    如果你只是要交换少量信息,当匿名邮件/短信用的话,那就和比特信重复了
    noli
        39
    noli  
    OP
       2014-12-16 03:45:37 +08:00 via iPhone
    @ryd994 匿名网络没什么可以吸的吧?我之前说过了,只要节点之间存在信任评分,想要获得服务先要获取足够的信任,所以剩下的问题就是评分算法够不够聪明而已。新人一开始的信任度只够探索网络,无法获取代理服务,这在算法上不难控制吧?

    你说的上传带宽问题这根本就不是软件要解决的问题。至于你说运营商会封锁tor,你太看得起运营商了。tor不是在这个层面被封锁的。

    更重要的一点是,匿名网络不是免费代理让你轻轻松松翻墙撸,这种事情本来就不是tor或者其他匿名网络擅长做的事情。而我在这里也没有说过要让匿名网络改善各位的翻墙体验,只不过对抗墙是匿名网络必备技能而已,不要把它当作撸AV的利器
    ryd994
        40
    ryd994  
       2014-12-16 08:21:59 +08:00 via Android
    @noli 匿名
    ryd994
        41
    ryd994  
       2014-12-16 08:23:53 +08:00 via Android
    @noli 匿名网络如果有足够的蜜罐,还叫什么匿名,而且我可以用大量假节点耗尽你可用的流量,让需要用的人用不了,这两点要做到的话,成本远没你想象的高
    noli
        42
    noli  
    OP
       2014-12-16 13:13:23 +08:00
    @ryd994 我来归纳一下你的思路逻辑:

    匿名网络会照顾新人->新节点有蜜罐->新节点可以吸血->网络功能被损害,正常节点利益受损 。。。
    是这个意思吗?
    我怎么觉得有点太想当然了呢?
    ryd994
        43
    ryd994  
       2014-12-16 15:21:09 +08:00
    @noli 不是故意照顾新人,而是你不能不给新人启动信用
    只要你给了,那就可以无限刷新人来吸血
    不一定是个人行为,国家机关完全有动机和有能力这样做
    事实上无论是p2p下载还是tor,这种情况都出现了
    你验证来源的做法没有解决tor的根本性问题
    noli
        44
    noli  
    OP
       2014-12-16 15:54:10 +08:00
    @ryd994 你的担心是有道理,但是解决这种问题其实很简单。

    我就随便想一个信任度评分函数出来吧,当然不一定最后就是这样的函数。

    设对某个节点A的信任度评分函数 f(n,t,p) = (n^2 + k)/t^2 + g(p),其中 n 是提供交换节点信息服务的次数,t是距离初次进入节点名单的时间长度;p 是提供代理服务的次数,g(p) 是根据代理服务次数换算成积分的函数。只要身份是可验证的,n 和 t 都是可以得到的。

    新节点的 p 为0,因为信任进入名单的时间很短,所以只要提供足够多的服务,信任度可以上升得很快;但反之,过了一段时间之后如果提供给邻居的服务不够多,那么信任度就会掉到很低了。

    再假设,如果积分低于 s1 的时候排除出节点记录,积分高于 s2 的时候可以为A节点提供代理服务。
    只要令 s1 < s2 那么就有一个合理的区间让 新节点有启动的信用,但又要求节点为他人服务一段时间之后才能要求代理服务。

    你觉得这样子大量制造新节点能吸到什么血吗?
    ryd994
        45
    ryd994  
       2014-12-17 01:21:52 +08:00 via Android
    @noli 那么问题来了:如果是这个样子,结果必定是上传带宽大而且挂机时间多的人得到服务。要么就是s2太低无法起到增加伪造成本的作用,要么就是s2太高导致大多数人即使长期挂机也得不到服务(还是那句话,国内大多数人的上传带宽捉鸡)。如果我有恶意,租一台服务器挂机,做成蜜罐,那我得积分的效率将是很多人的数百倍,而且成本不算高(特别是对有心审查/搞破坏的人)。这就是为什么p2p在国内一直不算热的原因。不是用户想吸血,而是不吸血根本没速度。
    noli
        46
    noli  
    OP
       2014-12-19 00:38:26 +08:00
    @ryd994 其实说白了就是,你觉得不可能有足够聪明的信任度评分算法,只会有极端的结果。我明白你的意思了,谢谢你的关注。
    noli
        47
    noli  
    OP
       2015-02-17 21:59:16 +08:00
    @ryd994 今天又回来review了一下这个主题,突然想补充告诉你,也当做是自己做一个笔记。
    信任度算法不是跟消息交换频率或者流量直接相关的,你之前说的那些蜜罐啊什么的,我猜你提出是类似于基于货币交换中存在的诈骗问题;但是我设想中的信任度算法可能会加入类似“边际效用递减”、和“惧怕损失”。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3761 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:27 · PVG 18:27 · LAX 02:27 · JFK 05:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.