西西河

主题:【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(中下) -- 1001n

共:💬32 🌺46
分页树展主题 · 全看首页 上页
/ 3
下页 末页
  • 家园 【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(中下)

    附注:1、非朋友所言极是。我查了一下,虽然德国的儿童节不该不是6月1日,但是文中随手的这一写,还是产生了硬伤――1930年,还没有这个儿童节……根据资料,补充如下:

    12年后的1942年6月,德国法西斯枪杀了捷克利迪策村16岁以上的男性公民140余人和全部婴儿。为了悼念利迪策村和全世界所有在战争中死难的儿童,反对虐杀和毒害儿童,以及保障儿童权利,1949年11月国际民主妇女联合会在莫斯科召开执委会,正式决定每年6月1日为全世界少年儿童的节日,即“国际儿童节”。

    已经将原文修改完毕。谢谢指正,欢迎继续提出宝贵意见!

    2、抱朴仙人朋友:我没打算说相声,故意使坏的是landlord,我是无辜的,请详察!嘿嘿:)

    ―――――――――――――――――――――――――――――――――――――――――――――――――――――

    对德国来讲,“天灾人祸”四个字真是再确切不过了――自己的不小心加上叛徒的出卖,使看上去坚不可摧的ENIGMA密码系统一点点出现了裂缝。不过,即便这样,整个系统崩塌的那一天还不会那么快到来。毕竟,扫帚不到,非同凡响的ENIGMA照例不会自己倒下。说到底,这些纰漏并不能从根本上直接动摇密码安全,最重要的是,雷霆万钧的打击还没到来――就在时代迫切需要英雄的时候,应该获得第二个花环的人――Marian Rejewski同志,终于光荣登场了!

    在我看来很奇怪的是,这位波兰民族英雄Marian Rejewski同志到底是哪国人,居然都成了一个小小的问题。从任何一份关于他生平的资料都可以得知,他于1905年8月26日出生在波兰的比得哥什(Bydgoszcz,也译做比得哥煦)。按说这也就完了,但是为了慎重起见,我又稍微翻了一下1905年前后的地图――这一翻就翻出问题来了。。。

    比得哥什位于波兰北部,维斯瓦河(Wisla River)西岸。这条维斯瓦河从南到北流经波兰全境,看上去,有点S形状的意思。维斯瓦河的中段穿越华沙,之后蜿蜒流向西北,在比得哥什附近掉头转向东北,最后在但泽附近汇入波罗的海――这个但泽,大家可能还有点眼熟吧?

    ――没错,就是那个一战后被辟为自由市,脱离了德国的版图的但泽。那么比得哥什呢?和但泽一样,在1905年的时候,都属于德国的西普鲁士地区。而这个包括但泽和比得哥什的西普鲁士地区,是在一战后才被划给波兰,成为所谓“波兰走廊”的;也正是因为这一刀,德国的疆域被分成了德国本土和东普鲁士两块,因为失去了中间连接的西普鲁士或者说“波兰走廊”,而不再接壤了――也就是说,Marian Rejewski同志1905年出生在比得哥什,的的确确就意味着他应该是德国公民!

    那。。我们的英雄Marian Rejewski同志,到底是德国人呢还是波兰人呢?这种出生后家乡就变成外国的情况,判断起来确实有点挠头,因为中国历史上这样的事情不算太多,很不好类比。非要头疼地找个例子来说,就是:比如1858年《中俄瑷珲条约》和《中俄北京条约》签定前五年,在海参崴出生的人,到底算中国人还是俄国人?蒙古独立前十年,出生在温都尔汗的人,到底算中国人还是蒙古人?

    我猜,国际法对这样的情况一定有规定吧,同时我想,所有这些生在怪异时代怪异地区的人大概都有权利选择自己的国籍吧。也许是双重国籍呢?这还真就不清楚了。。

    不管这些了,反正波兰从来是把Marian Rejewski同志作为自己的民族英雄纪念的,其它国家的观点也基本如此,所有资料都说他是波兰人――既然如此,那就这样吧。不过,这个插曲绝对不是没有意义的。我再提一个地方,波兹南――也是属于西普鲁士的,离比得哥什不远――这地方又有点眼熟,不是么?再提醒一下,这个地方有个波兹南大学。。

    这就是为什么当年波兰密码处要选择建立不久、水平也不太高的波兹南大学数学系,进行定向培养德语密码破译人才的关键――Marian Rejewski同志和他的许多同学、同事都能说流利的德语、对德国文化了如指掌,正因为他们本身就是在德国文化环境下长大的!事实上,也正是这些人――会德语的数学家――极大地帮助了密码破译工作。说起来,也算波兰不幸中的大幸吧。

    从论资排辈的角度讲,波兰的Marian Rejewski同志怎么算都是个后生――实际上,他比德国的Arthur Scherbius同志小了两轮还拐弯。Arthur Scherbius同志40岁的时候发明ENIGMA,而这会儿Marian Rejewski同志才13岁,在上中学……按说如此的时间差本来轮不到Marian Rejewski同志首先破解ENIMGA,但是造化弄人,如前文说所,ENIGMA在发明之后又沉寂了几年――这段时间差正好用来让Marian Rejewski同志茁壮成长,掌握足够的数学技能――而本事学到手的时候,ENIGMA才刚刚给别国造成了麻烦。。。

    Marian Rejewski同志在波兹南大学(Boznan University)数学专业毕业以后,进入德国著名的哥廷根大学(Gottingen University),进修了一年的统计学。之后回到波兹南大学,被密码处看上参加密码破译工作,1930年,开始研究德国顶级密码――ENIGMA,似乎就是在这期间,还顺手在波兹南大学教了两年数学……1932年,正式加入密码处,成为一个不穿军装的工作人员。

    就这样,年方25岁的Marian Rejewski同志正式对世界之谜――ENIGMA发起了强有力的挑战。真是自古英雄出少年啊……感慨过后,让我们来看一下Marian Rejewski同志参加破解ENIGMA前后,波兰在研究ENIGMA方面的一些零散情况:

    在意外拦截到德国外交邮包,获得了ENIGMA的第一手资料后,密码处决定以化名和假地址的方式,在德国市场上合法地购买一台真正的ENIGMA商业型,理由很简单:ENIGMA的商业型和军用型之间肯定有内在的联系;

    1928年,密码处为破译ENIGMA专门成立了新的项目组,设立了三个官员:组长Maksymilian Ciężki 上尉(后来晋为少校), Michalowski,和Czajsner;

    1930年1月15日,Gwido Langer少校(随后晋升为陆军上校)在华沙接替了Franciszek Pokorny少校,升任波兰军队总参谋部第二部负责人的职务(前文曾将第二部称为第二局,是考虑到当时具体编制规模过小的原因)。这时候,我们又碰上熟人了:这个Gwido Langer少校,就是上文所提到的,与那位SRV的负责人,法国上尉Bertrand交流情报的人;不过,这都是后一两年的事情了……也是他,顺手将送上门的法国情报锁进了抽屉……现在他升官了,不仅负责一个密码处,还管着整个情报部了(前文引用的是欠准确的资料,将和法国上尉交流情报时候的情报部部长Gwido Langer少校仍误为密码处处长,在此致歉!);

    1931年年中,波兰总参谋部第二部进行了编制调整,分设情报拦截处、无线电情报处,密码处升级成为密码局(Biuro Szyfr¢w,简写为BS),并按工作对象区域重新进行了调整。其中,BS-3针对苏联情报,BS-4针对德国情报,而BS4的头头就是3年前新成立的项目组的组长,后来晋升为少校的Maksymilian Ciężki 上尉;

    1931年年底,波兰人手里已经有了至少一台ENIGMA商业型机器,并且得知了若干有关军事型的信息;

    1931年12月7日到11日,SRF的负责人法国上尉Bertrand访问华沙,与Gwido Langer少校达成共识:情报共享――这样,因为共同的敌人――德国的ENIGMA,波兰终于和法国接上了线。这意味着波兰人的智力终于有机会放射出光芒了:不仅能够在日后直接帮助盟国密码人员进行针对ENIGMA的破译工作,而且更重要地,启发了他们在波兰人的思路上更进一步,最终彻底击败ENIGMA。

    现在我们把话题再拉回到Marian Rejewski同志身上。他自从初步破掉了ENIGMA之后,名声大噪,也历经了坎坷的人生――这些,我们后文还要详细讲到。而现在我们要说的,是整个第二次世界大战结束的三十多年后的1978年,他所接受的一次访谈。从里面,我们也能看到Marian Rejewski同志当年所做所为的思路(现在是不是时髦管这个叫心路历程啊?呵呵)[又,文中括号内注解为本人所加,希望能够帮助理解,也希望不是画蛇添足:)]

    ――“所有电文的前六个字母都有特殊的意义,检查一下你就可以发现这一点:它就是被重复加密的密钥。我很快盯上了构成密钥的这六个字母(每封电文都有自己独立的被加密过两次的密钥)。如果德国人没有这样加密密钥本身,而是在电文头部直接以明文给出密钥,最后他们的结果要好的多。反正我怎么都得设法解破这些密钥,此外我也得到了资料,才能进行工作,并破译ENIGMA本身。”

    ――“在我已经有了初步结果后的一天,Maksymilian Ciężki 少校给我拿来了一台商业型(ENIGMA),这样我在这件事(破译工作)上的感觉就好多了。”

    ――“为了解决它,接下来的工作就是处理特定的方程了。我倒没指望这个工作能够快速进展,尽管如此,最后还是碰上了一个障碍。后来在一个天气不错的日子,大概是1932年12月9日或者10日吧,Ciężki 少校带来了一些情报资料,我根本不知道那是从法国那里弄来的。里面包括了……(德国)1932年9月和10月这两个月使用的密钥表,。这对我是个巨大的帮助,真是谢天谢地我有了这些密钥……方程里的未知数减少了,这样我就可以解出整个方程了。又是一个好天气的日子,我正坐那儿算呢,(它的)内部连接(也就是配线的方式)突然就以字母和数字的方式明白呈现了。第一个转盘就在最远的右边,在每次输入密钥的时候都要被旋转一下。”

    ――“后来我知道了那些从(法国上尉)Bertrand 处传到华沙的情报是从Hans-Thilo Schmidt那里得到的,他的代号是Asche。”

    ――“我想,1932年年底前,在某种意义上,拿到手的机器已经被破解了:三个转盘之间的配线,和第四个部件:固定的滚筒(就是反射板)的具体情况都已经清楚了。现在这台普通的商业型机器已经被改动了,使用那些由(法国上尉)Bertrand提供的密钥,它就可以阅读1932年9月和10月的电文了。9月和10月太重要了,换句话说,它们属于两个不同的季度。这是因为密钥包括了几个基本特性,其中之一就是密钥每个季度才变一次(附注:密钥天天改变是后来的事情了)。也就是说,转盘的顺序(就是密钥)。转盘的编号是1、2、3,谁都可以在机器里插入他们自己乐意选择的那3个。当时,他们是每个季度变换一次。因为9月和10月分别属于两个季度,所以转盘的顺序也是不一样的。”

    ――“我已经有方法可以算出某个转盘的配线,不过我只能算出最远的右手边的那个转盘的情况,也就是每次输入密钥时旋转的那个。感谢9月的密钥,我可以算出9月时最远的右手边的那个转盘的位置。因为我同时也有10月的密钥,使用同样的方法,稍后我也算出了10月时最远的右手边的那个转盘的位置。这样,我就有了两个转盘的情况。第三个转盘和反射板的情况现在变的不那么困难了,我可以设法用其它的办法算出来。”

    ――“现在我们有了机器,但是我们还没有密钥,(而且我们)也不能太过迫切地要求(法国上尉)Bertrand不断地提供给我们每个月的密钥。就算他确实给过以后的密钥吧,但是我的确是再也没得到过了。现在情况完全掉转过来了:过去,我们是有密钥没机器,――结果我们破解了机器;现在我们有机器但是没密钥,我们必须想出办法找到每日变换的密钥。没用多久,我们找到了几种方法来,包括格栅法和字母循环圈表法(直译是旋转计数表法,根据后文意译如此)。字母循环圈表法方法极为重要,虽然它需要做大量的准备工作,但是准备好之后,找出密钥只需要十到二十分钟。”

    (以上内容,摘译自1982年1月首次出版的《Cryptologia》第六章第一节,Richard Woytak于1978年对Marian Rejewski同志的访谈,该书并于1984年以《Kozaczuk's Enigma》名字重印。顺便说一句,大家也看见了,一出现摘译的部分,1001n流利的中文顿时就惨遭摧毁,说都不会话了。。唉。。还得练。。。)

    说起来简单……我个人的看法是,那是Marian Rejewski同志的伟大谦虚。如果真象他说的那么简单,为什么别人破不掉?为什么德国会对ENIGMA那么倚重,从外交到内政,从军事到民事,不仅高级别的战争指挥,甚至就连生日贺电天气预报这样的东西都是用ENIGMA编码的呢?

    能破非一般的ENIGMA,这人一定也非一般人,这办法也一定非一般办法。而Marian Rejewski同志的办法究竟是什么,我们后文见分晓吧。

    【原创】被征服的谜――ENIGMA的故事(一):密码的前世

    http://www.cchere.net/article/371599

    【原创】被征服的谜――ENIGMA的故事(二):ENIGMA横空出世(上)

    http://www.cchere.net/article/372331

    【原创】被征服的谜――ENIGMA的故事(二):ENIGMA横空出世(下)

    http://www.cchere.net/article/372349

    【原创】被征服的谜――ENIGMA的故事(三):丘吉尔托起的灿烂星座

    http://www.cchere.net/article/374308

    【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(上)

    http://www.cchere.net/article/375877

    【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(中上)

    http://www.cchere.net/article/377011

    【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(中中)

    http://www.cchere.net/article/378141

    元宝推荐:不爱吱声,

    本帖一共被 12 帖 引用 (帖内工具实现)
    • 家园 写得很好,我支持

      三思的原文,偶也看过。不过,更喜欢这篇。偶有个小问题,现在的密码是怎么玩的啊

      • 家园 DES算法

        我自己就写过实现DES算法的底层LIB,主要是为保护商业应用。

      • 家园 现在的商用加密

        ,封闭系统内用的和ENIGMA很相似,不过对称加密的算法不同,而且算法是公开的,用的最多的是DES或其升级版3DES(就是用DES计算三遍,增加破解所需时间)。

        Internet上用的加密就很不同了,转成RSA那种非对称加密,也就是加密和解密的密钥不一样。

        • 家园 补充几点

          现代的文本加密主要还是对称加密。非对称加密太慢,而且也不适合对全文本加密,所以一般只是用在小数据加密上,比如加密文本对称加密密钥再传给对方。然后文本本身还是用对称加密。非对称加密还有一个用处就是核实发件人身份。

          现代主要有两种对称加密,数据流加密和数据块加密。数据流加密就是用算法和密钥一起产生一个随机码流,再和数据流XOR一起产生加密后的数据流。解密方只要产生同样的随机码流就可以了。数据块加密把原数据分成固定大小的数据块(比如64位),加密器使用密钥对数据块进行处理。一般来说数据流加密更快,但块加密更安全一些。常见的加密法里,des和3des是使用最多的数据块加密,aes是更新一些的块加密法,rc4是数据流加密,等等。

          二战以后,大家一般都放弃了保护加密算法的做法,因为太难了。而且数学上很强的算法就这么几种。所以现在都是公开算法。这些算法特性都不错,如果一个密钥长度不够强了,只要加长密钥长度就可以了。当然这种改变涉及改变加密硬软件,在使用中有些不便,不过一般认为算法本身还是够强不必改变。


          本帖一共被 1 帖 引用 (帖内工具实现)
          • 家园 善。非对称密钥加密也不慢的。

            另有一问请教,AES算法比DES在加密强度上是否有数量级的提高?

          • 家园 补充细致,我惭愧

            献花,呵呵

    • 家园 斗胆来解释一下啊

      算是补充1001n兄的内容,顺便回答大家的问题。

      如1001n兄文中所述,Enigma机有好几道密码手续。第一道是每个转轮的设置,第二道是转轮的位置,第三道是插线板的设置。Enigma的转轮上是个接线板,还有一圈字母。这个接线板跟字母的对应是可以调节的,密码本上用接线板上的一个洞指到某个字母的位置来指明对应关系。比方说,今天A是对换到Z的,明天我改一下转轮,A就对到B上去了。这个设置叫做“内部设置”(inner setting)。转轮的位置是在所有转轮都装到机器里以后进行设置的,Enigma机上有一个窗口,可以看到底下转轮们最朝上的一个字母。这个是通信双方约定的加密起始点,也通过密码本来指明。这个叫做“外部设置”(outer setting)。插线板的用途主要是把6对字母对换。比方说今天某个字母应该加密成A的,结果出来变成了X。同样的X也就变成了A。

      说明了Enigma的设置方法,下面就可以讲讲德国陆军的加解密过程了。现在有两个报务员甲和乙,甲打算发报给乙。甲拿出密码本,按照要求把自己的机器全部设置好。然后,他要自己想一个三位字母的密码。比方说,密码本上规定的外部设置是ABC,他自己想的密码是DEF。那么,他就先把机器的转轮拨到ABC的位置上,然后在键盘上连按两遍DEF,这样一来他就得到了一个加密的六位字母(比方说TJKWFU)。然后,他把机器转轮拨到DEF的位置上,开始加密实际的电文。最后发送时,他先把TJKWFU发出去,然后再发正文。乙收到电报以后,也把自己的机器拨到当天的设置上,头六个字母解密出来是DEFDEF,于是他就知道剩下的电文应该把轮子拨到DEF的位置上才能解密。这样一来,由于每个电报都是用不同的密钥加密的,看起来应该更加保险。

      实际上不是这样。因为每个电文开头这六个字母都是用同样的设置,这就成了一个弱点。换句话说,同样的字母、同样的条件,加密出来的结果当然也是一样的。因为头六个字母实际只动到了最右边那一个转轮,可以想见,如果收集到了足够的电文,那就有办法搞清楚这个转轮的接线、内部和外部设置。现在假定有一个报务员丙,他自己想的三位字母是DXO,这三个字母加密两遍出来是TRSWWO。注意到没有,他的加密中,头一个字母跟第四个字母跟甲的加密是一样的!对于破解者而言,这当然说明甲和丙用的第一个字母是一样的。这同时也说明,T下面是W,这两个字母今天有特殊的联系。如果又收到一组字母WSJFCK,破解者可以合理地推断,W后面是J,这两个字母也有特殊联系。如此一来,只要收到的电文足够多,就可以构造出一个有特殊联系的字母串TWJ...一串下去。最后一个字母又会绕回到T上。Rejewski从数学上证明了,这样的字母串只有那么多种可能。这就是“字母循环圈表法”。收集到了足够的字母串以后,Rejewski就可以构造一个硕大的方程。最开始这个方程里有太多的未知数,但加上情报得来的部分旧密钥以后,Rejewski找出了Enigma的转轮连线方式。有了连线方式,Rejewski就可以单用字母串找出当天的密钥,一切都豁然明朗了。

      有人可能要问:不是还有那个插线板加密嘛?Rejewski用群论的方法证明了,在一定程度上那个插线板是可以忽略掉的。换句话说那东西意思不大,并没有增加什么破解的难度。

      我先说到这里吧。头盔先戴好,大家砸砖。。。

      元宝推荐:不爱吱声,
      • 家园 我看不懂的都是高级的

        不砸砖。

        鲜花。

      • 家园 说的很清楚:)

        非常感谢韩亚梓朋友的解释!

        顺便指出一个小问题,就是

        现在假定有一个报务员丙,他自己想的三位字母是DXO,这三个字母加密两遍出来是TRSWWO。

        这里出现了个小小小BUG,对任意某个字母,ENIGMA的加密结果都不会是这个字母本身。这个例子中TRSWWO中的O是对DXO中的O第二次加密形成的,但是这个现象。。在ENIGMA的机制中是不可能的――解释起来又是个比较麻烦的工作,简单点说就是因为反射板的存在。这个反射板的工作前文说过类似于一面镜子,而这面镜子是不会把一个字母经过层层加密最后映射到自己身上的――前文在这个地方特意没有提,是因为这个原理光靠文字解释是很不容易说清楚的,以为可以蒙混过去……可初一过了,一眨眼就十五了。。呵呵。。

        又,韩亚梓朋友解释中的“内部设置”(inner setting),应该就是我所提到的“内部连接”(internal connections),相当于文内所说的“配线”(wirings)。

        最后,韩亚梓朋友解释了一下Rejewski的破解方法,这也是我下一节要提到的问题。不过,关于为什么Rejewski认为,德国人如果不加密密钥,而是直接发送明文密钥的话,反而更安全一些,韩兄还是没有提到啊:)现在已经知道加密过两次密钥是个漏洞,因此电文确实可以被破解,但是,为什么用明文发送密钥后,电文破解难度反而会加大呢?

        一直在苦思冥想中。。。(干脆以后叫一直在想算了。。当然,跟一直在飞、一直在算那是不敢比肩,咱就是个后辈,想也是瞎想地:)

        顺便说一句,这几天放假了,呵呵,得休息休息脑子,可能得过几天才有新东西了。也非常感谢大家的支持!没有这些支持,这个系列肯定写不到今天,从开始给的序列号就能看出来――大概三四篇就草草收场了。。。:)

        再次谢谢大家!

        • 家园 或许和积累经验有关

          波兰数学家在这段时间积累的经验对未来英国解密enigma起到了非常大的作用。如果德国开始的时候用明文发电报,波兰人也不会掌握解密enigma的基本原理。

        • 家园 不用加密更好是这个原因

          德国人当时是这样使用enigma的,有一个每日密钥,这个密钥印在密码本里,每天一个(战前是每季度一个),当天内所有同一系统所属的enigma机全部使用相同的当日密钥。德国人也知道到同样的密钥用来加密越多电讯越容易被破,所以这个每日密钥不用来加密电讯本身,而是让操作员自选给每篇电文加密的密钥。这个“每文密钥”用每日密钥加密,传给收信方。收信方用当天的每日密钥解这头6个字母得出每文密钥,再用这每文密钥解读电文。所以每日密钥只是一个现代密码学里所说的key encryption key。

          回到原问题。Rejewski可以从某些密文里解出该文所用的“每文密钥”,这里面有个运气问题,看原文是否“weak”。但他没有把握解出所有的每文密钥。同时从密文他解不出每日密钥,因为密文根本不是用每日密钥加密的,也就是说从密文里他根本得不到关于每日密码的信息。但是这头6个字母帮了他的忙,为他提供了用每日密钥加密的密文。而他又有原文(就是每文密钥),这就构成了保密学所说的known plain text attack。这种攻击可以帮助破译者了解加密机制。详细步骤就不说了,只要明白这一点就够了:对于Rejewski来说,这6个字母可以帮助他破解这个每日密钥。而一旦他获得了每日密钥,再解读所有当天电文就是小菜一碟了。

          他所说的“还不如发明文”有开玩笑的意思。用明文的确他就没有办法解每日密钥,可是如果每文密钥就这么公开,他又何必去解什么每日密钥呢?我不太明白的是为什么每文密钥要发两遍。任何规律都是密码大敌,这种重复更是要命,德国人应该不会想不到。我可以想出的理由只有为了防止错误,如果只发一遍,错了都不一定知道。就像现在注册都要输两遍口令一样。不知真实情况是否如此。

          在非对称加密发明之前,如何传送密钥一直是大问题。用key encryption key来加密密钥也还可以算是当时最好的办法了吧。不过实际使用中还有不少问题,第一是重复每日密钥,第二是很多操作员选了有规律的密钥,比如AAA,ZZZ,或者键盘最左边的三个键,等等,给解密方帮了不少忙。

          • 家园 不知道我是看懂了没有的,乱说几句

            我觉得是增加了弄清楚机器内部接线(转轮字母的对应关系)的可能性,

            内部接线应该是比较固定的,通信双方用的机器内部接线必须是一致的。

            而如果没弄清楚字母的对应关系,知道密钥也是没有用的。

          • 家园 说的很清楚啊

            我偶尔看懂了的,也是高级的。。。。

        • 家园 惭愧啊。。。

          当初一时手懒,打例子的时候就打错了,也没多想。

          我觉得用明文发出密钥也不是个好主意,因为那样一来等于去掉了一层加密,如果解密者知道了wiring的话最多试26^3次就出来了。当然如果解密者没有wiring的话,拿到了明文密钥也不能提供任何信息。如果把密钥加密一次,发两遍的话,自然比加密两次要安全。但是由于这些密钥都是基于同一个outer setting加密的,这样是不是也会有问题?

分页树展主题 · 全看首页 上页
/ 3
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河