快速回顾
出席: co, jrand0m, LeerokLacerta, mihi, mrflibble, mrsc, nop, shardy, thecrypto, w0rmus
会议记录
[22:53] 0) welcome
[22:54] 1) apps:
[22:54] 1.1) IM(即时通信)
[22:54] 1.2) NS(命名服务)
[22:54] 2) dev status:
[22:54] 2.1) subsystems
[22:54] 2.2) encryption key persistence
[22:54] 2.3) todo
[22:54] 3) spec stuff
[22:54] 3.1) mods
[22:54] 4) administravia:
[22:54] 4.1) anon cvs
[22:54] 5) ?
[22:55] 好,0) welcome
[22:55] 欢迎来到第 58 次会议
[22:55] 就这些吗
[22:55] 是的先生,除非还有人要补充?
[22:55] * nop 注意到 jrand0m 的编号是面向对象的 :)
[22:56] 3.1.2.2.4.5.8() ;)
[22:56] 嘿,它们也可以是 structs ;)
[22:56] 哈哈
[22:56] 的确如此
[22:56] 好,1.1) IM。thecrypto?
[22:56] 不过
[22:56] 2 有继承关系
[22:57] ;)
[22:57] 呵
[22:57] 别理我
[22:57] 好的
[22:57] 抱歉
[22:57] 继续
[22:57] *** mihi_ (~none@anon.iip) 加入频道 #iip-dev
[22:57] 好的,我现在在上传一些 IM 的基础规范
[22:58] (Link: http://www.thecrypto.org/i2pim.sxw)http://www.thecrypto.org/i2pim.sxw 供 oowriter 使用
[22:58] 我正在上传 pdf
[22:59] 如果你愿意我可以放到 i2p 站点上
[22:59] 等我一下
[22:59] 可以
[22:59] *** mrflibble (mrflibble@anon.iip) 加入频道 #iip-dev
[22:59] 你想把它放到 i2p/apps/IM/doc/ 里吗?
[22:59] *** mihi_ 现在叫做 mihi_backup
[23:00] 我可以
[23:00] 行
[23:00] 我是说进 cvs 里 :)
[23:00] 我也可以做
[23:00] (但放到网页上也不错)
[23:00] 哦
[23:00] 哈哈
[23:00] (Link: http://www.thecrypto.org/i2pim.pdf)http://www.thecrypto.org/i2pim.pdf
[23:01] “文件已损坏且无法修复” Adobe Reader 报错
[23:01] 再试一次
[23:01] * jrand0m 这边打开没问题
[23:01] MrEcho:PDF 文件吗?
[23:01] (那个 sxw)
[23:01] 刚才只上传了一部分
[23:01] 现在好了
[23:01] 呵呵
[23:02] 基本上我只放了在线状态(presence)、在线/离线消息,还有一条 message 消息
[23:02] 我不羞愧地从 I2NP 文档里抄了一些段落
[23:02] :)
[23:02] 呵 我就觉得有些地方眼熟 :)
[23:02] 我也在上传我做的 UI
[23:02] 我一直在做的那个
[23:03] jrand0m:我需要创建目录 apps/IM/doc 吗
[23:03] 是的,并且要逐个 cvs add
[23:03] -kb?
[23:03] 对
[23:03] thecrypto:我记得 apps/ 已经有了。
[23:04] presence 是什么?
[23:05] 我先跑个 update
[23:05] 不过很快就会进去
[23:05] *** Signoff: shardy (Ping timeout)
[23:05] 我的意思是大家尽情撕规范
[23:05] UI 也会很快进去
[23:05] 如果有需要澄清的地方,就 anonymail、e-mail 什么的联系我,我来改
[23:05] 我错过会议了?
[23:05] *** shardy (~shardy@anon.iip) 加入频道 #iip-dev
[23:05] thecrypto:你也许还想在邮件列表上发个通知,附上文档链接。
[23:05] 我以为我写上去了?
[23:05] 没呢,mrflibble,我们还在第一项
[23:05] mrflibble:会议进行中。
[23:05] 哦 抱歉,我没看到 “logger”
[23:06] thecrypto> 你说那是一个 destination,但那是用来发送消息的 destination 吗?离线消息怎么处理?
[23:06] 这儿没有 mids,所以没有 logger ;)
[23:06] 好的
[23:06] * mrflibble 继续潜水
[23:06] 哦等等,这些只是在线状态通知,抱歉
[23:06] 怎么订阅一个 presence?
[23:06] jrand0m:不支持离线消息
[23:07] 基本上
[23:07] presence 只是把一个 destination 和一个名字打包在一起
[23:07] 方便点
[23:08] 如果我们想转到 NS,可以先讲 NS,之后再回到这个?
[23:09] 行,酷
[23:09] 你们也可以继续给我发问题
[23:09] 其实,快速问一个
[23:09] 说吧
[23:09] 这个 IM 只支持纯文本吗?
[23:10] 这个基础版是的,但我会加上文件支持
[23:10] 酷~
[23:10] 我只是想先把系统的开端搭起来,再在上面迭代
[23:10] (迭代增量式)++
[23:11] 好极了。我会进一步看这个,大家也都看看……现在转到 1.2) NS。co?
[23:11] 命名服务规范 1.1 版(最终版)今天早些时候发布了。
[23:12] (随后一片欢呼)
[23:12] 基本上,我完成了程序需要的数据结构和网络消息部分。
[23:12] 我会在周四发布客户端 API。
[23:12] 然后开始实现 NS 应用。
[23:12] 很好
[23:13] 有一个想法变了,涉及 CA(证书颁发机构)在实体注册时的处理。
[23:13] co:你会怎么实现?
[23:13] co:是 name server 还是 client?
[23:14] thecrypto:嗯,我会先实现必要的数据结构。
[23:14] 然后是客户端,再是服务器和 CA 组件。
[23:14] 好的
[23:15] 正如我所说,我现在希望 CA 给新注册的实体签发一个证书。
[23:15] 他们在修改记录时会把这个证书呈交给命名服务器。
[23:15] 我还没有在这个版本里指定证书包含什么;这会放进下一版规范。
[23:16] 大家觉得这是个坏主意吗?
[23:16] 嗯。是否更简单/更安全的是让客户端用一对公钥/私钥?
[23:16] 也就是在注册时提供一个用于更新的公钥并对注册请求签名,之后每次更新都签名一个更新请求
[23:16] (这样 CA 永远拿不到私钥)
[23:17] 顺带说一句:所有 I2PIM 的内容都已经提交到 cvs 仓库了
[23:17] 很好
[23:17] 这么做也许更简单。我会重新考虑这个问题。谢谢你的建议。
[23:17] 如果没有别的问题,我关于命名服务就说这些。
[23:18] 看起来不错,我还没看 1.1,我看完如果有问题会发邮件
[23:19] 好。下一个话题?
[23:19] 好,2.1) 子系统的开发状态。
[23:19] *** w0rmus (o0o@anon.iip) 加入频道 #iip-dev
[23:20] 传输子系统已经足够好可以继续往前。对等体管理子系统用的是很蠢的算法做了个桩,但能用。network db、tunnel 管理和统计管理子系统还在路上。客户端子系统会很简单(直接复用 SDK 的本地-only router)
[23:21] 你说的蠢算法是什么意思?
[23:21] 不够快?
[23:21] 嗯,对等体管理子系统没有跟踪对等体性能,只是返回随机的对等体。
[23:22] 算法会随着进展更新和调优,以更好地做对等体选择
[23:22] 我手头当前的任务是构建和处理 garlic messages(garlic 消息,一种 I2P 分层消息封装),这是个 PITA。
[23:23] 但能搞,就是烦
[23:23] 这其实引出 2.2) 加密密钥持久化。
[23:24] garlic messages 用 ElG+AES 加密来包裹每个“clove”的层
[23:24] 而私钥还用于其他地方(传输、客户端管理)
[23:25] *** Signoff: thecrypto (Ping timeout)
[23:25] 把私钥和会话密钥一直留在内存里、永不落盘是理想的,但当 router 关闭(主动或故障)时就很糟糕
[23:26] 大家对下面哪种做法有想法吗:1)绝不把密钥写盘,冒着过多不必要消息丢失的风险(因为无法解密)2)写盘前加密它们 3)直接明文写盘?
[23:26] 选项 2。
[23:27] jrand0m 选项 2,或者按我们之前说的做
[23:27] 我们必须信任 localhost
[23:27] *** Signoff: cohesion (class)
[23:27] 我们假设 localhost 没被攻破
[23:27] 选项 2 的古怪之处在于,要么用户必须在启动 router 时输入口令,要么会话密钥可以被获知
[23:27] 说得对,nop。
[23:28] 再说我们是个传输层,没法太替他们担这个心,这可以在客户端侧调整,或者我们提供选项
[23:28] 取决于偏执等级
[23:28] 安全 vs 便利 的权衡
[23:29] 那我建议默认 3,并给用户选择使用 2。
[23:29] 正是
[23:29] 对。好在大家可以(而且应该!)拿 router 代码去改,做这种权衡——一个“tinfoil I2P router(偏执版)”和一个“jane sixpack I2P router(大众版)”
[23:29] 好,酷,那我现在就先用简单的 3)
[23:30] 好 2.3) todo
[23:30] * co 想在会议末尾回到 NS 话题。
[23:30] * nop 需要把 NS 的邮件读完
[23:30] 行,你现在是第 #5 项
[23:30] 我可以等到最后。
[23:31] mihi 写了一些测试来指出 SDK 实现里的 bug。有些已修,有些没。修它们在 todo 上 :)
[23:32] 另外,各种规范改了大概一打地方。我一有时间就更新文档并发出来,或者我可能先在 wiki 上放个勘误页
[23:33] word
[23:34] 其他的 todo……嗯,我今天早上修了“Wrong Size generating key”这个问题,以及一些随机 bug
[23:34] 好了,开发状态就这些。3) 规范相关
[23:35] 3.1) 参见 todo 里的 mods。大多是排版修改。今天在实现 garlic 时碰到一个稍大点的变动。问题不大,只是需要挪动一些数据结构,并在加密上做点小技巧。我会把它写进勘误。
[23:35] 3.2) 【我知道这项不在议程里,但还是说一下】规范问题
[23:35] (马上回来,如果需要我我还在潜水)
[23:35] 有人对任何规范有问题吗?
[23:35] 不错 shardy
[23:36] jrand0m:请再说一次哪个规范在哪个文档里。
[23:37] (Link: http://wiki.invisiblenet.net/iip-wiki?I2PProtocolSpecs)http://wiki.invisiblenet.net/iip-wiki?I2PProtocolSpecs 上都有映射
[23:37] 我去看一下。
[23:38] (看着这个我想起还得把 secure reliable UDP 传输写成文档。这又是一个 todo……)
[23:39] 最近有人问该看哪些规范——基本上,除非你想知道 router 怎么工作(或者你想帮忙实现),否则你不需要读 I2NP 规范。I2CP 和数据结构里 I2CP 的部分就够了
[23:40] jrand0m
[23:40] 是的先生?
[23:41] 你说的 UDP 是指真的 UDP 包那种 UDP 吗
[23:41] 还是泛指一种 UDP 协议
[23:41] 对,UDP 就是 UDP 包
[23:41] 用在 I2P 上
[23:41] *** thecrypt1 (~thecrypto@anon.iip) 加入频道 #iip-dev
[23:41] *** thecrypt1 现在叫做 thecrypto
[23:41] i2p/code/router/java/src/net/invisiblenet/i2p/router/transport/udp 里有实现
[23:42] 回来了
[23:42] 欢迎回来
[23:42] 有人能发我我不在时发生了什么吗?
[23:43] 这个 UDP 实现挺简单——做一次 DH 交换,消息拆成 1K 包,用生成的密钥做 AES256 加密
[23:43] 支持重密钥,但目前不是自动的
[23:43] ACK 会打包返回(比如“我收到了消息 42 的所有包,直到第 18 个,但不包括 3 和 7”)
[23:44] (而我先做 UDP 实现而不是 TCP 的实际原因是,UDP 以几乎零开销提供“免费”的异步 IO)
[23:45] 当然
[23:45] 这个 UDP 实现还剩两件事——用 Station-to-Station(STS)协议抵御 MITMs(中间人攻击),以及加一个“糟了,我忘了会话密钥”的数据包
[23:45] 不错
[23:46] 在 UDP 传输之后,我下一个想实现的是轮询 HTTP——这样就能同时支持普通用户(UDP)以及被防火墙/NAT/代理的用户(轮询 HTTP)
[23:47] 好的,所以,是的,这需要写成规范文档 :)
[23:48] * jrand0m !自扇一巴掌,因为先写代码再写规范
[23:48] 先写代码再写规范对我有帮助
[23:48] 对,迭代做效果最好
[23:48] (实现过程中我们也在发现规范的问题,等等)
[23:49] 好,这是 3) 规范。4) 行政杂务
[23:49] 4.1) anon cvs。thecrypto?:)
[23:49] 正好赶上
[23:49] 嗯,我在看,我想 2401 现在被挡了
[23:49] 你能在本地做 cvs -d :pserver: 吗?
[23:49] 可能还要做点 inetd 的东西,谢谢 jrandom
[23:50] 啊 酷
[23:50] 我试试,我忘了你可以那样做了 :)
[23:51] 命令就是 cvs -d :pserver: 吗?
[23:51] cvs -d :pserver:anonymous@localhost:/home/cvsgroup/cvsroot/ co i2p
[23:52] 另外,如果能放个 bugzilla 上去也很棒
[23:52] acvs [checkout aborted]: connect to localhost(127.0.0.1):2401 failed: Connection refused
[23:52] 行,加了 inetd.conf 那行并对 identd 发了 kill -HUP 之后呢?
[23:52] 我去试下那条 inet 行,稍后回复你
[23:52] 呃,inetd :)
[23:52] 行,酷
[23:53] pserver 跟在同一行吗?
[23:53] 对,整行都放一起
[23:55] 好了,行政杂务就这些,至少我能想到的
[23:55] 5a) co,你上
[23:56] 当两个人想注册相同的实体名,第二个会被拒绝。
[23:56] 但如果我们用基于签名的方法,
[23:56] 被拒的人仍然可以给命名服务器发消息
[23:56] 让它修改记录。
[23:56] 有两种可能:
[23:57] 1) CA 把获批实体的公钥副本发给命名服务器。
[23:57] 2) CA 给注册名字的人发一个由其私钥签名的证书。命名服务器会有 CA 的公钥来验证它。
[23:58] 如果恶意用户让命名服务器修改某条记录,没有证书就会阻止修改。
[23:58] 我当时是这么想的。
[23:59] 但那样 CA 就知道密钥了——用非对称密码的话 CA 只会知道公钥,而且 CA 永远不想也不需要把那个公钥给任何人——那只是让合法更新者在请求更新时拿来做签名验证的
[00:00] 你描述的更像对称密码——本质上就是用个口令
[00:00] cvs 在跟我作对!
[00:00] (证书就是 CA 和昵称合法持有者之间共享的机密)
[00:00] *** mrsc (~efgsdf@anon.iip) 加入频道 #iip-dev
[00:01] 怎么了 thecrypto?
[00:01] 我加了用户 anonymous,空密码,把它加进 readers 和 cvsgroup,但我得到 cvs login: authorization failed: server localhost rejected access to /home/cvsgroup/cvsroot for user anonymous
[00:01] jrand0m:说得好。就当这部分规范还没定,我再想想。
[00:01] 好的
[00:01] *** LeerokLacerta (~leerok@anon.iip) 加入频道 #iip-dev
[00:02] こんにちは。
[00:02] 嗯 thecrypto,我不觉得你想要一个名为 anonymous 的操作系统用户
[00:02] 嗨 LeerokLacerta
[00:02] 你好,jrand0m。
[00:02] 我设了个密码,现在能用了
[00:03] jrand0m:你看完规范如果还有建议也发我。
[00:03] 会的,co
[00:03] 不错 thecrypto……他们的 shell 是 /bin/false 吗?
[00:03] 我现在得去找 cvs 手册里那个如何建用户的章节
[00:03] -> *thecrypto* 密码是什么?
[00:04] 现在是了
[00:05] 好,我们可以在会后处理这个。
[00:05] 好,议程最后一点:5b) ?
[00:05] 还有什么问题/想法/担忧吗?
[00:05] 就看看 IM 应用
[00:06] 现在它只会生成一个树,但能让你看到它开始的样子
[00:06] 没有 SOCKS?
[00:06] 哦对,我忘了这个
[00:06] 啊 酷 thecrypto
[00:06] SOCKS?就是那个代理协议?
[00:06] 有人擅长做图标吗?
[00:06] 是的。
[00:06] 我每次问到的答案都是“没有”。
[00:07] 啊。是的,我们肯定会需要一个 SOCKS 代理,但目前没人做。
[00:07] 嗯。
[00:07] 这是我们希望在 1.0 公测时具备的应用之一,这样人们能浏览基于 i2p 的站点,也能匿名浏览普通网页
[00:07] 免费的 socks 代理已经够多了,我觉得 ;)
[00:08] 正是,我们只需要集成它们
[00:08]