关于网络加密,监听式破解可行性的看法

中山野鬼 发布于 2012/04/26 17:27
阅读 416
收藏 1

问题区有个帖子是谈WEB加密的。说到后面,我觉得有必要独立水一下,来说明我的观点了。当然欢迎拍砖。

但有两个不谈,

1、客户端或服务器被攻击了,都是别人的人了,你还想啥,默默的忍受,还是快乐的享受,是你的心情问题了。

2、暴力破解。这个也不谈。只要是确定性的东西,无论是否可逆,理论上都是可以暴力破解的.抬杠,1秒换次密码,那头1秒可以产生无数的密码组合,不也一样?我们假设,暴力破解超出了破解者的成本预算,所以放弃。

下面谈下,在当前无法破解时,修改密码下是否可以破解。

假设,服务器每次给与客户端一个动态密码B。客户端的实际键盘属于为A,客户端A,B组合获得C。C是实际网络传递的,到服务器端,服务器根据以存的信息,B,A进行同样计算,其结果和C进行匹配,一验证客户的身份。如果验证通过,再根据C对其他所有数据进行解释(无论叫加密也好,域映射,也罢)只要监听者不能将C的匹配和其他数据内容进行篡改,则C至多是个中继代理。

那么对于客户端产生新的密码,A‘,就是键盘输入,讨论如下:

首先,确认一个函数, f ,至少具备两个性质。

1、可交替运算。简单的说。乘法就是的。

2、不可逆。(相对的,因为计算机都是数字的嘛)

不可逆则保证了,函数的任意自变量,无法通过应变量和其他自变量获取。

那么对于新键盘操作,产生C’,此时根据了服务器的动态口令,假设是B,再根据老的C进行处理。由此,是 f(C',B,C) = K

此时,B,K都被监听者获取。服务器也同样记录下B,和K。

当新密码产生作用时,此时产生新的动态口令,假设是B’,此时客户端传递的是 f(C',B') = KK

此时监听者,记录到了 B‘,KK。

而服务器的匹配方式是 ,先对 KK进行处理。f(KK,C,B) = E,通过交换律我们可以看做 f(C',B,C,B') = f( f(C'B,C) ,B') = f(K,B') = f(KK,C,B)

监听者要想能真正伪造动作,则仍然需要获取C的信息。但由于监听者手上只有K,B,B‘,KK,由于f不可逆,因此,C仍然无法获得。

我上面说的比较泛。但希望能从理论的角度来把问题阐述清楚。省得,一个个的案例来回答了。

简单的总结,只要C,C’等等没有被实际监听,那么加密数据可以被监听获取,但不能被监听者篡改,一旦篡改,会导致服务器端数据不匹配,而拒绝服务。

所以攻击的手段,无非两个思路,暴力破解,和肉鸡化。什么U盾之类的东西,都不能防止这两样,只能提高暴力破解的成本。如果你都被肉鸡了。等于你被clone了。你的账户被别人挪用,不是U盾的问题,等同于你自己默认被别人(准确说就是你自己,一个CLONE体而已)挪用。只能怪你自己。

加载中
0
没手机的不配发言
没手机的不配发言

引用比较多啊。 一般不好理解。 简单点说。 服务器传给客户的是 明文验证 数据。客户传递给服务器的信息是由 新密码密文 密文验证 做成的。
密文验证明文验证+老密码 生成的 非可逆加密 数据。 新密码密文 是 新密码+老密码  可逆密文
服务器 可以对 新密码密文 还原出新密码。 老密码就作废了。

新密码密文密文验证 满足其一都不能成立。 并且 无法通过计算 获得 ,因为密文验证 是一次性的。

0
中山野鬼
中山野鬼

引用来自“木人mr”的答案

引用比较多啊。 一般不好理解。 简单点说。 服务器传给客户的是 明文验证 数据。客户传递给服务器的信息是由 新密码密文 密文验证 做成的。
密文验证明文验证+老密码 生成的 非可逆加密 数据。 新密码密文 是 新密码+老密码  可逆密文
服务器 可以对 新密码密文 还原出新密码。 老密码就作废了。

新密码密文密文验证 满足其一都不能成立。 并且 无法通过计算 获得 ,因为密文验证 是一次性的。

新密码密文  和  新密码+老密码 不一定需要可逆的。
0
没手机的不配发言
没手机的不配发言

引用来自“中山野鬼”的答案

引用来自“木人mr”的答案

引用比较多啊。 一般不好理解。 简单点说。 服务器传给客户的是 明文验证 数据。客户传递给服务器的信息是由 新密码密文 密文验证 做成的。
密文验证明文验证+老密码 生成的 非可逆加密 数据。 新密码密文 是 新密码+老密码  可逆密文
服务器 可以对 新密码密文 还原出新密码。 老密码就作废了。

新密码密文密文验证 满足其一都不能成立。 并且 无法通过计算 获得 ,因为密文验证 是一次性的。

新密码密文  和  新密码+老密码 不一定需要可逆的。
必须有一个可逆的才行, 这样才能从加密数据当中提取新数据作为新的密码,比如在改密码的时候。 还必须用老的密码作为钥匙, 并且提取出来的数据还必须包含一个已知数据作为对新数据的判断是否为伪装数据。
没手机的不配发言
没手机的不配发言
也许我没有说清楚,这里 客户端传递的 “新密码” 并不一定是用户实际使用密码明文, 很可能只是用户密码的一种非可逆编码md5()。 由于网络有监听, 所以无论是什么, 监听者都能记录。 这么处理只是为了防止 监听者 伪造数据,生成不可知 新密码 进而造成真是用户拒绝登录。
0
中山野鬼
中山野鬼

引用来自“木人mr”的答案

引用来自“中山野鬼”的答案

引用来自“木人mr”的答案

引用比较多啊。 一般不好理解。 简单点说。 服务器传给客户的是 明文验证 数据。客户传递给服务器的信息是由 新密码密文 密文验证 做成的。
密文验证明文验证+老密码 生成的 非可逆加密 数据。 新密码密文 是 新密码+老密码  可逆密文
服务器 可以对 新密码密文 还原出新密码。 老密码就作废了。

新密码密文密文验证 满足其一都不能成立。 并且 无法通过计算 获得 ,因为密文验证 是一次性的。

新密码密文  和  新密码+老密码 不一定需要可逆的。
必须有一个可逆的才行, 这样才能从加密数据当中提取新数据作为新的密码,比如在改密码的时候。 还必须用老的密码作为钥匙, 并且提取出来的数据还必须包含一个已知数据作为对新数据的判断是否为伪装数据。
没必要。你看一下我说的,函数是符号交换律的就可以了。
0
没手机的不配发言
没手机的不配发言

"假设,服务器每次给与客户端一个动态密码B。客户端的实际键盘属于为A,客户端A,B组合获得C。C是实际网络传递的,到服务器端,服务器根据以存的信息,B,A进行同样计算,其结果和C进行匹配,一验证客户的身份。如果验证通过,再根据C对其他所有数据进行解释(无论叫加密也好,域映射,也罢)只要监听者不能将C的匹配和其他数据内容进行篡改,则C至多是个中继代理。"

看这段, "根据C 对其他所有数据进行解释。" 这个算是对密文还原的过程把, 那么数据应该是可逆加密吧!

问题出在数据伪造上。
虽然加密钥匙不知道。 但是加密方法可以从监听者那里获取。
由于 真实 客户会用 对的密码+临时密码B 做操作。 并且操作结果 传递给服务器, 服务器也一定可以接受。  问题问题是 “ 如果验证通过,再根据C对其他所有数据进行解释”。 还有上面这句 “ 客户端A,B组合获得C。C是实际网络传递的,”  所以 C 会被窃取。
 数据解释过程中,监听者 只要把 真实数据当中的新密码部分,换成无用数据, 那么服务器 认为提交数据是正确的。 其结果就是, 无论是监听者 还是 用户 。都不不知道 最终新密码是什么。 这样真实用户就受到 拒绝服务 攻击了。 
 方法是, 一但 客户进入修改密码阶段,监听者立即想办法隔离服务器。比如ddoc 攻击服务器。 此时客户并不知道服务器已经拒绝服务了。 客户正常提交数据给服务器, 服务器没有收到, 监听者 却获得了 客户提交的数据。 然后 篡改 新密码 数据。篡改,并不需要利用,只需要跟原来的不同。 之后立即通过伪装渠道发送给服务器。 
根据认证,这个C是客户真实产生的,符合认证。 其结果就是 新密码 不是客户所希望的。
客户修改密码后就再也登录不上系统了。 拒绝服务了。 监听者其实也不知道 新密码。但是客户无法登录就造成了拒绝服务。

0
中山野鬼
中山野鬼

引用来自“木人mr”的答案

"假设,服务器每次给与客户端一个动态密码B。客户端的实际键盘属于为A,客户端A,B组合获得C。C是实际网络传递的,到服务器端,服务器根据以存的信息,B,A进行同样计算,其结果和C进行匹配,一验证客户的身份。如果验证通过,再根据C对其他所有数据进行解释(无论叫加密也好,域映射,也罢)只要监听者不能将C的匹配和其他数据内容进行篡改,则C至多是个中继代理。"

看这段, "根据C 对其他所有数据进行解释。" 这个算是对密文还原的过程把, 那么数据应该是可逆加密吧!

问题出在数据伪造上。
虽然加密钥匙不知道。 但是加密方法可以从监听者那里获取。
由于 真实 客户会用 对的密码+临时密码B 做操作。 并且操作结果 传递给服务器, 服务器也一定可以接受。  问题问题是 “ 如果验证通过,再根据C对其他所有数据进行解释”。 还有上面这句 “ 客户端A,B组合获得C。C是实际网络传递的,”  所以 C 会被窃取。
 数据解释过程中,监听者 只要把 真实数据当中的新密码部分,换成无用数据, 那么服务器 认为提交数据是正确的。 其结果就是, 无论是监听者 还是 用户 。都不不知道 最终新密码是什么。 这样真实用户就受到 拒绝服务 攻击了。 
 方法是, 一但 客户进入修改密码阶段,监听者立即想办法隔离服务器。比如ddoc 攻击服务器。 此时客户并不知道服务器已经拒绝服务了。 客户正常提交数据给服务器, 服务器没有收到, 监听者 却获得了 客户提交的数据。 然后 篡改 新密码 数据。篡改,并不需要利用,只需要跟原来的不同。 之后立即通过伪装渠道发送给服务器。 
根据认证,这个C是客户真实产生的,符合认证。 其结果就是 新密码 不是客户所希望的。
客户修改密码后就再也登录不上系统了。 拒绝服务了。 监听者其实也不知道 新密码。但是客户无法登录就造成了拒绝服务。

哈。你注意你的如下描述:

“ 数据解释过程中,监听者 只要把 真实数据当中的新密码部分,换成无用数据, 那么服务器 认为提交数据是正确的。”

这段工作肯定是在老密码还起作用的事情。既然老密码还在,如果监听者篡改了数据,服务器怎么可能允许这次行为通过呢?服务器会认为这次动作是伪造的。重起量是服务器认为此次提交动作失败,拒绝完成当前操作步骤。此时监听者只能等于阻碍了客户端和服务器端的沟通。而实际上如果监听者的目的就是如此的话,能隔离客户端就可以了。何必大费周章呢?是不是?每次客户端提交数据,监听者就将其转移到别的地方去,或者把发给服务器端的信息给篡改。

监听者的所有目的是为了能伪装成客户,完成服务器认可的行为。破坏客户与服务器的联系,只会禁止服务器的服务提供,这并不是监听者想要的,除非目的本身就是让服务器不提供服务。

而上述的行为,更有价值的是,迫使服务器和客户做出曝露自身的其他不安全行为。

 

 

0
没手机的不配发言
没手机的不配发言

引用来自“中山野鬼”的答案

引用来自“木人mr”的答案

"假设,服务器每次给与客户端一个动态密码B。客户端的实际键盘属于为A,客户端A,B组合获得C。C是实际网络传递的,到服务器端,服务器根据以存的信息,B,A进行同样计算,其结果和C进行匹配,一验证客户的身份。如果验证通过,再根据C对其他所有数据进行解释(无论叫加密也好,域映射,也罢)只要监听者不能将C的匹配和其他数据内容进行篡改,则C至多是个中继代理。"

看这段, "根据C 对其他所有数据进行解释。" 这个算是对密文还原的过程把, 那么数据应该是可逆加密吧!

问题出在数据伪造上。
虽然加密钥匙不知道。 但是加密方法可以从监听者那里获取。
由于 真实 客户会用 对的密码+临时密码B 做操作。 并且操作结果 传递给服务器, 服务器也一定可以接受。  问题问题是 “ 如果验证通过,再根据C对其他所有数据进行解释”。 还有上面这句 “ 客户端A,B组合获得C。C是实际网络传递的,”  所以 C 会被窃取。
 数据解释过程中,监听者 只要把 真实数据当中的新密码部分,换成无用数据, 那么服务器 认为提交数据是正确的。 其结果就是, 无论是监听者 还是 用户 。都不不知道 最终新密码是什么。 这样真实用户就受到 拒绝服务 攻击了。 
 方法是, 一但 客户进入修改密码阶段,监听者立即想办法隔离服务器。比如ddoc 攻击服务器。 此时客户并不知道服务器已经拒绝服务了。 客户正常提交数据给服务器, 服务器没有收到, 监听者 却获得了 客户提交的数据。 然后 篡改 新密码 数据。篡改,并不需要利用,只需要跟原来的不同。 之后立即通过伪装渠道发送给服务器。 
根据认证,这个C是客户真实产生的,符合认证。 其结果就是 新密码 不是客户所希望的。
客户修改密码后就再也登录不上系统了。 拒绝服务了。 监听者其实也不知道 新密码。但是客户无法登录就造成了拒绝服务。

哈。你注意你的如下描述:

“ 数据解释过程中,监听者 只要把 真实数据当中的新密码部分,换成无用数据, 那么服务器 认为提交数据是正确的。”

这段工作肯定是在老密码还起作用的事情。既然老密码还在,如果监听者篡改了数据,服务器怎么可能允许这次行为通过呢?服务器会认为这次动作是伪造的。重起量是服务器认为此次提交动作失败,拒绝完成当前操作步骤。此时监听者只能等于阻碍了客户端和服务器端的沟通。而实际上如果监听者的目的就是如此的话,能隔离客户端就可以了。何必大费周章呢?是不是?每次客户端提交数据,监听者就将其转移到别的地方去,或者把发给服务器端的信息给篡改。

监听者的所有目的是为了能伪装成客户,完成服务器认可的行为。破坏客户与服务器的联系,只会禁止服务器的服务提供,这并不是监听者想要的,除非目的本身就是让服务器不提供服务。

而上述的行为,更有价值的是,迫使服务器和客户做出曝露自身的其他不安全行为。

 

 

服务器怎么可能知道数据被修改了啊。

客户修改密码,肯定会修改一些连服务器都不知道的数据, 中间人唯一不知道的是客户的密码。
但是,作为中间人,肯定能截取客户的密码信息,并且一定可以截取客户正常的验证。
中间人修改一些客户想修改,但是服务器不知道比如新密码,这样的数据。 
中间人就篡改这些数据,达到拒绝服务的目的。 这些只是隐患。 还构成不了客户数据丢失。

反过来, 服务器要想接受 客户提交的一些连服务器都不知道的数据的时候, 也肯定会对提交上来的数据进行 解码过程。 如果客户提交的数据是非可逆加密的话,又该怎么提取信息啊。

你说保证不被修改数据的方法是 可逆加密算法 是服务器发送的。 并且客户需要老密码才能知道的加密算法。 中间人无法获取算法。 就算获取加密后的数据也无法伪造。这样就能保证提交数据不被破坏了。
算法不知道就无法伪造数据了。

0
没手机的不配发言
没手机的不配发言
不论了。 头大。 好累。
0
中山野鬼
中山野鬼

引用来自“木人mr”的答案

引用来自“中山野鬼”的答案

引用来自“木人mr”的答案

"假设,服务器每次给与客户端一个动态密码B。客户端的实际键盘属于为A,客户端A,B组合获得C。C是实际网络传递的,到服务器端,服务器根据以存的信息,B,A进行同样计算,其结果和C进行匹配,一验证客户的身份。如果验证通过,再根据C对其他所有数据进行解释(无论叫加密也好,域映射,也罢)只要监听者不能将C的匹配和其他数据内容进行篡改,则C至多是个中继代理。"

看这段, "根据C 对其他所有数据进行解释。" 这个算是对密文还原的过程把, 那么数据应该是可逆加密吧!

问题出在数据伪造上。
虽然加密钥匙不知道。 但是加密方法可以从监听者那里获取。
由于 真实 客户会用 对的密码+临时密码B 做操作。 并且操作结果 传递给服务器, 服务器也一定可以接受。  问题问题是 “ 如果验证通过,再根据C对其他所有数据进行解释”。 还有上面这句 “ 客户端A,B组合获得C。C是实际网络传递的,”  所以 C 会被窃取。
 数据解释过程中,监听者 只要把 真实数据当中的新密码部分,换成无用数据, 那么服务器 认为提交数据是正确的。 其结果就是, 无论是监听者 还是 用户 。都不不知道 最终新密码是什么。 这样真实用户就受到 拒绝服务 攻击了。 
 方法是, 一但 客户进入修改密码阶段,监听者立即想办法隔离服务器。比如ddoc 攻击服务器。 此时客户并不知道服务器已经拒绝服务了。 客户正常提交数据给服务器, 服务器没有收到, 监听者 却获得了 客户提交的数据。 然后 篡改 新密码 数据。篡改,并不需要利用,只需要跟原来的不同。 之后立即通过伪装渠道发送给服务器。 
根据认证,这个C是客户真实产生的,符合认证。 其结果就是 新密码 不是客户所希望的。
客户修改密码后就再也登录不上系统了。 拒绝服务了。 监听者其实也不知道 新密码。但是客户无法登录就造成了拒绝服务。

哈。你注意你的如下描述:

“ 数据解释过程中,监听者 只要把 真实数据当中的新密码部分,换成无用数据, 那么服务器 认为提交数据是正确的。”

这段工作肯定是在老密码还起作用的事情。既然老密码还在,如果监听者篡改了数据,服务器怎么可能允许这次行为通过呢?服务器会认为这次动作是伪造的。重起量是服务器认为此次提交动作失败,拒绝完成当前操作步骤。此时监听者只能等于阻碍了客户端和服务器端的沟通。而实际上如果监听者的目的就是如此的话,能隔离客户端就可以了。何必大费周章呢?是不是?每次客户端提交数据,监听者就将其转移到别的地方去,或者把发给服务器端的信息给篡改。

监听者的所有目的是为了能伪装成客户,完成服务器认可的行为。破坏客户与服务器的联系,只会禁止服务器的服务提供,这并不是监听者想要的,除非目的本身就是让服务器不提供服务。

而上述的行为,更有价值的是,迫使服务器和客户做出曝露自身的其他不安全行为。

 

 

服务器怎么可能知道数据被修改了啊。

客户修改密码,肯定会修改一些连服务器都不知道的数据, 中间人唯一不知道的是客户的密码。
但是,作为中间人,肯定能截取客户的密码信息,并且一定可以截取客户正常的验证。
中间人修改一些客户想修改,但是服务器不知道比如新密码,这样的数据。 
中间人就篡改这些数据,达到拒绝服务的目的。 这些只是隐患。 还构成不了客户数据丢失。

反过来, 服务器要想接受 客户提交的一些连服务器都不知道的数据的时候, 也肯定会对提交上来的数据进行 解码过程。 如果客户提交的数据是非可逆加密的话,又该怎么提取信息啊。

你说保证不被修改数据的方法是 可逆加密算法 是服务器发送的。 并且客户需要老密码才能知道的加密算法。 中间人无法获取算法。 就算获取加密后的数据也无法伪造。这样就能保证提交数据不被破坏了。
算法不知道就无法伪造数据了。

你掉到坑里面了。“服务器怎么可能知道数据被修改了啊。”这是你的问题。那么我们看一下如下内容。

包的序列如下

A B

新密码在什么地方? 在B里,但不是B。是通过公开的算法,由A的参与,解出的C。如果监听者,直接完全修改 B 则会导致服务器端  f(A,B‘) = C’,C‘非法。

方法很简单,假设    键盘输入是 D。则  f'(A,D,D) = B ,但是 当B改变为B‘时,  f'(A,E,F) = B'。

你要注意,我说的不可逆是对密钥本身的获取。而不是对数据。如果数据的加密不可逆,那么服务器只能当个数据库处理,其他什么都没有意义。但是只要密钥本身,不可被篡改,则监听者就不能伪装客户,产生合法行为,被服务器通过。


0
中山野鬼
中山野鬼

引用来自“木人mr”的答案

不论了。 头大。 好累。
这就头大啦。哈。看来你的堆栈还得多扩充点。搞算法,要脑袋的堆栈足够深。哈。 这类问题的量,对我而言,连热身都不够。
返回顶部
顶部