免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21155 | 回复: 9
打印 上一主题 下一主题

也说Hash与加密 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-18 02:23 |显示全部楼层 |倒序浏览
原贴的起因及讨论详见下面链接及前后各页:
http://bbs.chinaunix.net/thread-1242846-5-1.html   该贴被锁。

我想我明白了bbjmmj的意思。

Hash生成伪随机序列码,记作PN。原始信息,记作A。
1、PN码加密原始信息A,就是原始信息A与PN码进行异或运算(相当于调制),得到加密信息B。
2、加密信息B与PN码再次进行异或运算(相当于解调),得到原始信息A。
这个就是直接序列伪随机码扩频的基本过程,也是码分多址的基础。这个是通信工程专业的内容,大四选修有一门《扩频通信》里面讲得很明白。
我估计ssffzz1没学过通信,所以看不明白bbjmmj的意思,也不明白这意味着什么——这个就是SSSD-CDMA(也就是联通卖给电信的那个CDMA)的本质。
ssffzz1和bbjmmj所说的“加密”不是一回事。bbjmmj说的更广义,是除了计算机圈子以外公认的“加密”定义。ssffzz1说的那个“加密”必须以可逆运算为前提,只有搞计算机的人才这么狭义地理解“加密”二字的含义。

至于我说的那个意思,我估计ssffzz1没明白。
我不用Hash产生的PN码调制信息,我就是用Hash运算本身处理信息。
1、将明文拆成一段段小的明文,每段明文ai都在集合空间A内。
2、输入信息ai的集合空间A是输出信息bi的集合空间B的子集时,我想问,Hash输出能否保留原来的全部信息量,并且能够实现一对一或一对多的对应关系?
3、如果是,那么这种处理虽然不是可逆的,但是它不丢失信息,它可以将信息以另一种形式表达。我觉得能实现这个功能就是加密。
4、不可逆无非是不好解密而已,不是不能解。我写一份穷举集合A~集合B对应关系的对应表,自己查表解密就好。
这里面涉及了对信息的计量,《信息论》里面有详述,是通信工程大三的专业必修课。

没错,我的那个意思是有点抬杠,没有太大的实际操作性。现代加密理论执著地找一个可逆的运算(当然在处理前后不能丢失信息),就是为了解密方便,而不是其他什么原因。
当量子计算机实用了以后,我想,现代加密理论就该执著地找一个不可逆的不丢失信息的运算了。
凡事没有绝对。

我的论述第2步是一个疑问句,所以我会再找找资料。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
2 [报告]
发表于 2008-10-18 11:23 |显示全部楼层
谢谢。互相学习。新闻区那边的是忍不住手痒写的~

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
3 [报告]
发表于 2008-10-19 19:27 |显示全部楼层
偶然想到一件事:
    通信里讲信息编码的时候,有“码距”这个概念,就是说在输入集合中,不是每一个元素都要使用,只使用其中的一部分元素,且这些被使用的元素之间的差异(就是“码距”)比较大,可以提高容错性。
    这提醒我,在对原始信息编码的时候,不是每一个输入元素我都要用。这样,在输入是输出的子集的情况下,即使仍然有碰撞,也不足为惧。一方面碰撞很少,另一方面可以把碰撞列举出来,在编码和解码的时候不使用会发生碰撞的元素。

偶然想到,写下来。我的第二个步骤那个疑问句,现在还是疑问句,我仍然没有答案。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
4 [报告]
发表于 2008-10-20 11:05 |显示全部楼层

回复 #10 win_hate 的帖子

就事论事地说:
这个太简单了,码长不够填零不是?
我编码的时候不使用以零结尾的元素,解码的时候把零抹去。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
5 [报告]
发表于 2008-10-20 11:07 |显示全部楼层

回复 #22 ssffzz1 的帖子

碰撞没有关系,8楼和23楼的回答足够。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
6 [报告]
发表于 2008-10-20 11:31 |显示全部楼层
原帖由 win_hate 于 2008-10-19 20:21 发表
你这个想法跟用 md5 来作流密码又不一样。是想直接把 md5 当加密算法了。
  •   无论 md5 和 sha-1 都没有保证是置换;
  • 只要是 Hash 算法都会在设计上使逆转非常困难,所以即使上面一条能保证,也没有意义。因为你不知道如何把信息提取出来。
  • 你打算把密钥放在哪里?接在明文后面?

  • 你问到点子上了。
    这个密钥就是PN码发生序列的生成多项式**,它是不可交换的。如果要交换这个多项式,又要返回到如何交换密文(密钥)的老路上来,问题就又回到了起点。

    先说点题外话:
    事实上,bbjmmj说的这个“PN码调制-CDMA通信”的确不是通过交换密钥通信的。
    在这个系统中,要有两个前提条件:
    1、通信双方互相信任,互相信赖。比如手机终端和小区基站。
    2、双方准备的多项式相同,且不是一个,是很多很多个,已经固化在硬件里。通信开始时商定用哪一个多项式,而第三方最多监听到多项式的代号,是不可能知道多项式的具体参数的。

    这样产生以下后果:
    1、监听的第三方不知道多项式,监听到的就是白噪声。
    2、监听方如果是内鬼,知道所有的多项式,那么他收到多项式代号之后,理论上可以马上(实际上一定会有延迟,这个延迟很关键)生成解码PN序列。
    3、然而,这个内鬼再也没有机会了,因为码分多址通信需要进行前导序列的训练,就是说手机和基站在之前已经把时钟完全对齐了,他俩的PN码是同步的,而内鬼已经赶不上参与前导序列训练了,第三方与通信双方的PN码是不同步的。内鬼收到的仍然是白噪声。
    4、由于上面第2步那个关键的延迟,内鬼已经不可能收集到所有信息了。

    **到目前为止,我仍然没有直接回答你的问题,而是在说bbjmmj那个方法。他/她的那个办法,每一个hash生成的PN与生成多项式生成的PN是等价的。他/她说的一次一密,正是每次CDMA通话时所做的,每次CDMA的通话,使用的生成多项式都不同。
    ----------------------------------------------------------
    现在我回答你的问题:
    与bbjmmj的那个方法相同,我的抬杠的想法也是要满足上述两个前提条件的。而这,正是现代加密原理中不认可的。现代加密原理并不要求加密方是经过认证的可信赖的,这是我们分歧的根源。我们说的“加密”大前提是不一样的,对“加密”的定义也不一样,结论自然不同。这个不必强求,你们的诘问可以促进我们共同思考,很有意义。

    我想,纵然量子计算没有实用,我的加密方式也有用途,比如数据银行,类似银行提供的保险柜服务。
    在这里,加密的是我,解密的也是我,我的信息存在公共空间,并不需要别人知道。这是一个有前途的应用,云存储必然以此为基础。
    我把这个点子免费告诉大家。
    不过貌似Unix系统的登陆口令就是这么保存的,班门弄斧,见笑了。

    还是那句话,我们双方所说的“加密”的大前提不同,定义也就不同,结论也就不同。但是仍然感谢诘问。

    [ 本帖最后由 cheveu 于 2008-10-20 11:56 编辑 ]

    论坛徽章:
    1
    IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
    7 [报告]
    发表于 2008-10-20 11:39 |显示全部楼层
    原帖由 ssffzz1 于 2008-10-20 11:10 发表
    我也认为没有关系。

    哪么吧 一次一密 扯进来有何意义。

    另外我认为的MD5的碰撞是不可预测的,你不可能预测到一段明文到底能和多少个其他的明文的HASH结果相碰撞。他到底会和多少个谁碰撞。


    看来我还是有一点没有说清楚。
    明文,要进行编码,变成一个个输入序列的元素,这些元素们属于同一个有限集合。
    有限集合的Hash变换,是可以穷举的,从而可以挑出所有的碰撞,在编码时躲开不用。

    论坛徽章:
    1
    IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
    8 [报告]
    发表于 2008-10-20 15:17 |显示全部楼层
    斑竹,还有zxz1984 ,你们的意思我明白,但也许我说的没有实例不好理解。
    可以穷举的。用有限的元素表达无限的信息,这个正是我们每天都在做的。举个例子,我们使用汉字,不就是有限元素集合么?表达的信息从来没受过制约啊。

    严谨点说:图形图像语音文字信息,所有的信息,都可以用一连串的0和1表示。
    当然,0和1组成的空间太小,可以把这一连串0和1搞成固定长度的,比如128位或者1280位都无所谓,然后编个字典,这个字典就是编码空间。
    当然,也不一定非得是2进制,16进制(0-f)32进制(0-y)都很好。进制搞大了,编码空间就更复杂更保险。
    总之,所有的信息,都可以表示成N进制的连续数据流。按照固定长度分段作为输入元素,输入元素就处于有限空间中了(比如24位16进制编码空间),用有限的元素就可以表达无限的信息了。

    如果信息本身就很短,那就不必分段了,直接算hash好了。然而,正如zxz1984说的,短信息的加密本身就很不保险。我有个想法,算两次Hash,第一次把信息搞长(代价是冗余度提高),第二次是真正加密。偶然想到的,不一定严谨,抬杠的成分偏多。
    --------------------------
    说到这里,前面的帖子提到,我要躲开0结尾的元素,有两个办法。
    一是码元就不含零。比如16进制搞成(1-g),32进制搞成(1-z)。
    二是码元含零,但是每一个元素都加一个后缀,比如“1011”,解码以后去掉这个后缀。

    [ 本帖最后由 cheveu 于 2008-10-20 16:06 编辑 ]

    论坛徽章:
    1
    IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
    9 [报告]
    发表于 2008-10-20 15:38 |显示全部楼层

    回复 #32 win_hate 的帖子

    如果你看那些冗长的通信的东西越看越糊涂,那我简单地回复你如下:
    我的那个办法,密钥要么是一个生成多项式外加一个输入集合,要么是一个字典,这两者是等价的。
    密钥不用交换,就保存在硬件里。
    如果我是数据银行的客户,密钥就是加密解密的电子钥匙。
    如果是两方同时通信,那么这两方必须互相信任,并且密钥必须是预先放置于通信设备内的,而且是多组。
    我重复一遍,加密方不加认证时,我这个办法没用,那个时候必须传递密钥(或者更精确地说是公钥)。我这个处理方法,是不适用于你那个通常情况的,所以,通常情况下,也没有人这么做。
    然而悲哀的是(我牢骚一句),通常情况下,很少有人想想为什么非得这么做,却不能那么做。

    论坛徽章:
    1
    IT运维版块每日发帖之星
日期:2016-07-05 06:20:00
    10 [报告]
    发表于 2008-10-21 10:48 |显示全部楼层

    回复 #40 论坛名只能7个字 的帖子

    我确信自己说得很清楚了。我是对称加密。
    解密的办法就是:“查字典”。
    给出生成多项式和输入集合,自己生成字典,这个和“查字典”是等效的。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP