[技术][讨论]用php, js来对内容做rsa加密

162 views
Skip to first unread message

viru...@gmail.com

unread,
Dec 27, 2009, 9:23:58 PM12/27/09
to pon...@googlegroups.com
贴我昨天的blog来跟大家讨论讨论,看看有没有能让效率更高的办法。目前用了 http://www-cs-students.stanford.edu/~tjw/jsbn/ 的大数运算库,效率提高很多,在webkit内核的浏览器上已经算比较可用了。IE可用est建议的CAPICOM,应该也会比较好,但Firefox太慢了。



这是一个用于文本加密的库,主要用于http协议下的防窃听。一般来说,如果应用https协议可以有效的避免窃听。但有几种情况必须考虑。

(1) 主机同时有https和http协议,部分用户通过https协议访问,获得了保护。但也有用户通过http访问,这部分用户会遭到窃听。除非关闭http请求,全面转向https。
(2) 主机并没有https支持。

很多情况下,我们需要保证主机安全,最好的办法是将其混入数字森林中。即:这台主机输出的内容没有人能看得懂的,只由无意义的代码和数字组成。用户浏览这台主机,不会触发任何关键词扫描。甚至该主机连https协议都不使用,更凸显其低调本色。

换言之,一个网站如果把自己的内容都变成字母和数字的组合,且不使用https协议,那么他就是数字森林中的一片树叶,丝毫不引人注意。

我们的目标应该是传输过程中不引人注意,并非绝对的不可破解的安全。

因此这个库的工作流程是: 
1 php对"内容"做rsa加密->将加密结果输出到页面上。
2 用户浏览页面,html代码中的"内容"被加密成数字形态。私钥可以直接输出在页面代码中,也可由用户输入一次,保存在cookie中。使用cookie会降低密钥泄露的危险,更加有效。
3 通过javascript在用户浏览器上将这些数字解密为内容。
4 通过javascript dom来把内容写回到页面上。用户即可浏览。

利用javascript解密,可以把运算负担分散到客户端上。窃听者如要窃听每一个页面的内容,则必须要 1 获得密钥 2 用密钥解密内容

在已知密钥情况下,如客户端的每个页面运算负担为 1 ,页面数量n ,那么窃听者获得密钥之后的运算负担为 1*n。

为了运算效率,使用小质数作为rsa的p,q,理论上窃听者可以通过因数分解算出密钥,其运算负载为k,注意k 远远大于1。

如果每个站点使用不同的密钥,共计m个站点,窃听者的运算负担为 m*k+1*n,且负载集中。

而,如果采用双向可逆加密方法,在得知算法的情况下,窃听者运算负载极小。如果在通过变换算法来增加难度,又无法做到通用,给用户正常浏览造成困难。使用rsa方法,算法是标准的,用户使用成本很低,窃听成本很高。

在项目代码中,我已经实现了这一目标。但仍然有效率问题。

目前问题:

1 在没有bcmath和gnumath函数的php主机上,php加密内容的运算效率很低。和bcmath差距几十倍。好在大部分情况下,主机都是有bcmath函数的。这个问题不严重。
2 js的bigint运算效率很低,主要是powmod的效率低,而这是rsa解密最频繁的操作。

------------------------------------------------------------------------------------------------
霍炬
北京银杏科高信息技术有限公司    http://www.ginkgotek.com
tel:13911041484      010-63105844

万变的互联网,不变的搜索
Regards,
huoju




陨落雕

unread,
Dec 27, 2009, 10:21:18 PM12/27/09
to TopLanguage
rsa设计的时候就没考虑效率吧。用随机密钥然后用AES来对称加密内容,用rsa加密密钥似乎是正常的做法。

On Dec 27, 9:23 pm, "virus...@gmail.com" <virus...@gmail.com> wrote:
> 贴我昨天的blog来跟大家讨论讨论,看看有没有能让效率更高的办法。目前用了http://www-cs-students.stanford.edu/~tjw/jsbn/的大数运算库,效率提高很多,在webkit内核的浏览器上已经算比较可用了。IE可用est建议的CAPICOM,应该也会比较好,但Firefox太慢了。
>
> 代码在http://code.google.com/p/phpjsrsa/


>
> demo在:http://blog.devep.net/rsatest/test.php
>
> 这是一个用于文本加密的库,主要用于http协议下的防窃听。一般来说,如果应用https协议可以有效的避免窃听。但有几种情况必须考虑。
>
> (1) 主机同时有https和http协议,部分用户通过https协议访问,获得了保护。但也有用户通过http访问,这部分用户会遭到窃听。除非关闭http请求 ,全面转向https。
> (2) 主机并没有https支持。
>
> 很多情况下,我们需要保证主机安全,最好的办法是将其混入数字森林中。即:这台主机输出的内容没有人能看得懂的,只由无意义的代码和数字组成。用户浏览这台主机 ,不会触发任何关键词扫描。甚至该主机连https协议都不使用,更凸显其低调本色。
>
> 换言之,一个网站如果把自己的内容都变成字母和数字的组合,且不使用https协议,那么他就是数字森林中的一片树叶,丝毫不引人注意。
>
> 我们的目标应该是传输过程中不引人注意,并非绝对的不可破解的安全。
>
> 因此这个库的工作流程是:
> 1 php对"内容"做rsa加密->将加密结果输出到页面上。

> 2 用户浏览页面,html代码中的"内容"被加密成数字形态。私钥可以直接输出在页面代码中,也可由用户输入一次,保存在cookie中。使用cookie会降低 密钥泄露的危险,更加有效。


> 3 通过javascript在用户浏览器上将这些数字解密为内容。
> 4 通过javascript dom来把内容写回到页面上。用户即可浏览。
>
> 利用javascript解密,可以把运算负担分散到客户端上。窃听者如要窃听每一个页面的内容,则必须要 1 获得密钥 2 用密钥解密内容
>
> 在已知密钥情况下,如客户端的每个页面运算负担为 1 ,页面数量n ,那么窃听者获得密钥之后的运算负担为 1*n。
>
> 为了运算效率,使用小质数作为rsa的p,q,理论上窃听者可以通过因数分解算出密钥,其运算负载为k,注意k 远远大于1。
>
> 如果每个站点使用不同的密钥,共计m个站点,窃听者的运算负担为 m*k+1*n,且负载集中。
>

> 而,如果采用双向可逆加密方法,在得知算法的情况下,窃听者运算负载极小。如果在通过变换算法来增加难度,又无法做到通用,给用户正常浏览造成困难。使用rsa 方法,算法是标准的,用户使用成本很低,窃听成本很高。
>
> 在项目代码中,我已经实现了这一目标。但仍然有效率问题。
>
> 目前问题:
>
> 1 在没有bcmath和gnumath函数的php主机上,php加密内容的运算效率很低。和bcmath差距几十倍。好在大部分情况下,主机都是有bcmath 函数的。这个问题不严重。


> 2 js的bigint运算效率很低,主要是powmod的效率低,而这是rsa解密最频繁的操作。
>
> --------------------------------------------------------------------------- ---------------------
> 霍炬
> 北京银杏科高信息技术有限公司 http://www.ginkgotek.com
> tel:13911041484 010-63105844

> email:virus...@gmail.com
> gtalk:virus...@gmail.com MSN:huo...@hotmail.com

ChenMing

unread,
Dec 27, 2009, 10:36:16 PM12/27/09
to pon...@googlegroups.com
我认为要安全,最简单的方式还是HTTPS。

如果你一定要在HTTP里加密,可否这样实现(仅仅是想法,没有实现,共讨论):
请求建立的时候协商一个公用的密码,协商过程要安全,可以有很多方式来交换这个初始的密码,这方面已经有现成的标准的。

在后续的通信中发送方把要发送的内容实用这个密码做AES(或其它对称加密算法)加密,接收方在收到数据后再进行之前的密码解码。

对称加密/解密比非对称的效率有非常大的区别的。相信这种方法可以提供你的性能。

2009/12/28 viru...@gmail.com <viru...@gmail.com>:


> 贴我昨天的blog来跟大家讨论讨论,看看有没有能让效率更高的办法。目前用了
> http://www-cs-students.stanford.edu/~tjw/jsbn/
> 的大数运算库,效率提高很多,在webkit内核的浏览器上已经算比较可用了。IE可用est建议的CAPICOM,应该也会比较好,但Firefox太慢了。
> 代码在 http://code.google.com/p/phpjsrsa/
> demo在: http://blog.devep.net/rsatest/test.php
> 这是一个用于文本加密的库,主要用于http协议下的防窃听。一般来说,如果应用https协议可以有效的避免窃听。但有几种情况必须考虑。
> (1)
> 主机同时有https和http协议,部分用户通过https协议访问,获得了保护。但也有用户通过http访问,这部分用户会遭到窃听。除非关闭http请求,全面转向https。

你可以在你认为存在敏感信息的页面自动把HTTP跳转到HTTPS。这个不是很难吧。

> (2) 主机并没有https支持。
> 很多情况下,我们需要保证主机安全,最好的办法是将其混入数字森林中。即:这台主机输出的内容没有人能看得懂的,只由无意义的代码和数字组成。用户浏览这台主机,不会触发任何关键词扫描。甚至该主机连https协议都不使用,更凸显其低调本色。

难道因为是 HTTPS 就惹火啦吗?可以把HTTPS的端口换成80 ?

--
Regards.
Chen Ming

viru...@gmail.com

unread,
Dec 27, 2009, 10:45:45 PM12/27/09
to pon...@googlegroups.com
老兄,你难道没发现,咱们这个组,有时候https是上不来的,只能用http?

On Dec 28, 2009, at 11:36 AM, ChenMing wrote:

我认为要安全,最简单的方式还是HTTPS。

如果你一定要在HTTP里加密,可否这样实现(仅仅是想法,没有实现,共讨论):
请求建立的时候协商一个公用的密码,协商过程要安全,可以有很多方式来交换这个初始的密码,这方面已经有现成的标准的。

在后续的通信中发送方把要发送的内容实用这个密码做AES(或其它对称加密算法)加密,接收方在收到数据后再进行之前的密码解码。

对称加密/解密比非对称的效率有非常大的区别的。相信这种方法可以提供你的性能。



Tinyfool

unread,
Dec 27, 2009, 10:51:26 PM12/27/09
to pon...@googlegroups.com
这个逻辑其实很好,我们应该大力的让过滤系统不爽一下,唯一需要考虑的就是,过滤方式多种多样,我们防过滤的方式也要多种多样




--
Tinyfool的开发日记 http://www.tinydust.net/dev/
代码中国网 http://www.codechina.org
myTwitter: http://twitter.com/tinyfool

ChenMing

unread,
Dec 27, 2009, 11:06:57 PM12/27/09
to pon...@googlegroups.com
怪了,我一直是用HTTPS的,从来没有连不上的时候。我在工作日几乎是天天都会看的。

2009/12/28 viru...@gmail.com <viru...@gmail.com>:

--
Regards.
Chen Ming

Tinyfool

unread,
Dec 27, 2009, 11:08:44 PM12/27/09
to pon...@googlegroups.com
你连的上,总有人连不上,看看最近组里面的讨论就知道了。中国的网络情况千差万别,没人能代表全部的人。

2009/12/28 ChenMing <mocke...@gmail.com>

ChenMing

unread,
Dec 27, 2009, 11:22:34 PM12/27/09
to pon...@googlegroups.com
也是,我也有看到类似抱怨的。谁让我们有伟大的长城呢。

对内容审查,我不怎么关注,但还是不知觉中受它的影响导致很多网站不能访问,不知道下面这个页面你看过没有:

http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9B%BD%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5

其实很多国家又有类似内容审查的东西,自然也就匿名的TOR,自然也就会有人研究如何反TOR...

2009/12/28 Tinyfool <tiny...@gmail.com>:

--
Regards.
Chen Ming

est

unread,
Dec 27, 2009, 11:56:47 PM12/27/09
to pon...@googlegroups.com
理论和实践相差很大的。现在ooxx运动一个很大的障碍就是低廉主机不可能提供ssl。就开放80端口和http,在有限空间下做到相对安全吧。

2009/12/28 ChenMing <mocke...@gmail.com>:

est

unread,
Dec 28, 2009, 12:00:16 AM12/28/09
to pon...@googlegroups.com
国外反对MPAA和RIAA的censorship和国内其实一回事。

可以参考BitTorrent的进化历史。就产生了 Protocol encryption (PE),和 protocol header
encrypt (PHE)

HTTP、SSL、SSH都可以被认为是不安全的,因为它们的握手是明文的。

我知道netifera做了一套定制版的openssh,可以实现obfuscated handshake.

2009/12/28 Tinyfool <tiny...@gmail.com>:

ChenMing

unread,
Dec 28, 2009, 12:08:54 AM12/28/09
to pon...@googlegroups.com
我理解SSL一点不安全,可以在通信的中间节点插入一个中间人攻击。但是如果SSL使用双向证书认证,不仅客户端认证服务端,而且要服务器也认证客户端,这是非常安全的。但现实是对客户端证书的请求很少,实现的成本相对较高。

如果只认证服务器的证书,只接受已知的服务器证书指纹,也是相对安全的。

2009/12/28 est <electr...@gmail.com>:

--
Regards.
Chen Ming

Kenny Yuan

unread,
Dec 28, 2009, 12:41:37 AM12/28/09
to pon...@googlegroups.com
一个“累死GFW”的思路:

不一定非得要做到“无法审查”的程度,能把GFW累死(或者累得半死)就不错了

从这个角度来说,只要算法的运算量大就好

比如:让GFW暴力破解某加密算法A。此算法A相对密码学中的经典算法们,暴力破解较容易,但还是很费时间,以致于GFW无法使用“监听+插10060”的方式

然后么,就是推广的问题了,用户数量上去了,GFW就累死了

--
Kenny Yuan
C++, UI, LISP, MMA, Psychology and Automobile.
BLOG: CS巴别塔(Computer Science Babel)
URL1: http://csbabel.wordpress.com/
URL2: http://blog.csdn.net/yuankaining/

est

unread,
Dec 28, 2009, 12:55:09 AM12/28/09
to pon...@googlegroups.com
伊朗电信有一招比较狠,叫做限速。或者叫没有QoS的互联网。

2009/12/28 Kenny Yuan <yuank...@gmail.com>:

Kenny Yuan

unread,
Dec 28, 2009, 1:01:37 AM12/28/09
to pon...@googlegroups.com
中国的敏感词省更狠,全断了,HO HO

不知道为什么伊朗狠不下心来,切断网络多简单、多省力啊

许多中国专家走狗和火灾中先走的人肯定也在想和我一样的问题



2009/12/28 est <electr...@gmail.com>

viru...@gmail.com

unread,
Dec 28, 2009, 1:03:14 AM12/28/09
to pon...@googlegroups.com
诸位,偏离讨论方向了啊。咱只讨论算法和结构哈。别的事情回头再说。

On Dec 28, 2009, at 2:01 PM, Kenny Yuan wrote:

中国的敏感词省更狠,全断了,HO HO

不知道为什么伊朗狠不下心来,切断网络多简单、多省力啊

许多中国专家走狗和火灾中先走的人肯定也在想和我一样的问题



jun lin

unread,
Dec 28, 2009, 1:24:47 AM12/28/09
to pon...@googlegroups.com
现在的新疆就是以后的中国。

Kula

unread,
Dec 28, 2009, 2:39:46 AM12/28/09
to pon...@googlegroups.com
我们组织起来做一个反审查内容发布系统吧

只谈技术..


Ogden Nash  - "The trouble with a kitten is that when it grows up, it's always a cat."

2009/12/28 jun lin <linjun...@gmail.com>

viru...@gmail.com

unread,
Dec 28, 2009, 3:12:56 AM12/28/09
to pon...@googlegroups.com
顺着我这个主题讨论,不跑题就是了啊。
On Dec 28, 2009, at 3:39 PM, Kula wrote:

我们组织起来做一个反审查内容发布系统吧

只谈技术..

Simon Liu

unread,
Dec 28, 2009, 3:39:07 AM12/28/09
to pon...@googlegroups.com
看过demo的页面和代码,现在的页面内容是以加密的形式,保存在网页中的,然后用js解密后重新渲染。

然后我想到两个问题:
第一个是,密钥要保存在页面中吗?不一定,有个建议,可以用页面的url形成一个唯一标示(比如一个hash值或bash64值),然后通过ajax的方式从另外一个地方取得这个密钥。后台会对每一个页面都对应一个密钥。窃听者要根据不同网站生成页面唯一标识字符串的算法的不同去获得密钥(比如根据网站的域名+页面url+一个网站的标识字符串来形成hash或者base64值),这样可以避免直接从页面取得密钥,进而增加窃听者的通用破解算法的难度。甚至可以定时变更密钥,然后对页面内容重新加密。

第二个是,页面内容要保存在当前的页面里面吗? 不一定,可以用ajax的方式从另外一个url去获取。这样获取来的内容,除了是加密过的内容,甚至还可以是压缩过的(http://jsicdn.appspot.com/example/zip.html),获取到客户端之后用js解密或者解压。这样同样也也增加了窃听者通用破解算法的难度,同时也避免了页面内容的特征化。





--
Simon Liu
Email/MSN/GTalk: yuntao.liu#gmail.com

Simon Liu

unread,
Dec 28, 2009, 4:00:49 AM12/28/09
to pon...@googlegroups.com
另外,讨论下窃听者的窃听成本。
从窃听者的角度来看,排除掉人工审查的方式(这个就不是技术问题了,谁也跑不掉,如果是根据页面内容进行准实时的机器审查(比如现在的关键字审查),那么页面可能必须是明文或者接近于明文才行。虽然据说我们伟大的matrix里面,还会去对zip包解压过滤,但是这是通用格式,采用非通用方式就必须要窃听者定制了。那么这个加密解密的过程,需要多大的复杂度才能对窃听者产生计算负载上压力呢?
我想,从最终用户的角度来说,应该是有一个时间上的限制的,比如页面加载延迟超过3秒,大概就算有点慢了。那么js解密需要3秒的话,页面大小和算法复杂度能够达到一个什么样的程度呢?
从窃听者的角度来说,如果窃听到的内容是明文的(即使ajax的方式,通过js传输的内容大多也是准明文的),那么自然不在话下。如果不是内容明文的,那么来考虑一下解密的成本:如果采用C实现的方式来解密,那么比较C和JS的效率差异,JS加密的方式对窃听者的成本有多大?这个就要看应用这套方式的规模有多大了;如果不能直接用C的方式来解密,例如需要JS参与,必须要用类似搜索引擎爬ajax页面的方式去获取内容,那么必须用一个浏览器的内核去获取内容,这个成本本身就比较高了。

2009/12/28 Simon Liu <yunta...@gmail.com>



--
刘金雨(云涛)
Email/MSN/GTalk: yuntao.liu(AT)gmail.com

xLight

unread,
Dec 28, 2009, 11:51:28 PM12/28/09
to TopLanguage
从 测试结果看,chrome的已经在可接受范围内了。Opera那个圣诞preAlpha也不错

Time: 124ms :Chrome
Time: 1437ms:Opera 10.10
Time: 221ms :Opera 10.50 PreAlpha
Time: 2110ms :IE8
Time: 1758ms :FireFox 3.5.5


On Dec 28, 10:23 am, "virus...@gmail.com" <virus...@gmail.com> wrote:
> 贴我昨天的blog来跟大家讨论讨论,看看有没有能让效率更高的办法。目前用了http://www-cs-students.stanford.edu/~tjw/jsbn/的大数运算库,效率提高很多,在webkit内核的浏览器上已经算比较可用了。IE可用est建议的CAPICOM,应该也会比较好,但Firefox太慢了。
>
> 代码在http://code.google.com/p/phpjsrsa/


>
> demo在:http://blog.devep.net/rsatest/test.php
>
> 这是一个用于文本加密的库,主要用于http协议下的防窃听。一般来说,如果应用https协议可以有效的避免窃听。但有几种情况必须考虑。
>

> (1) 主机同时有https和http协议,部分用户通过https协议访问,获得了保护。但也有用户通过http访问,这部分用户会遭到窃听。除非关闭http请求-,全面转向https。
> (2) 主机并没有https支持。
>
> 很多情况下,我们需要保证主机安全,最好的办法是将其混入数字森林中。即:这台主机输出的内容没有人能看得懂的,只由无意义的代码和数字组成。用户浏览这台主机-,不会触发任何关键词扫描。甚至该主机连https协议都不使用,更凸显其低调本色。


>
> 换言之,一个网站如果把自己的内容都变成字母和数字的组合,且不使用https协议,那么他就是数字森林中的一片树叶,丝毫不引人注意。
>
> 我们的目标应该是传输过程中不引人注意,并非绝对的不可破解的安全。
>
> 因此这个库的工作流程是:
> 1 php对"内容"做rsa加密->将加密结果输出到页面上。

> 2 用户浏览页面,html代码中的"内容"被加密成数字形态。私钥可以直接输出在页面代码中,也可由用户输入一次,保存在cookie中。使用cookie会降低-密钥泄露的危险,更加有效。


> 3 通过javascript在用户浏览器上将这些数字解密为内容。
> 4 通过javascript dom来把内容写回到页面上。用户即可浏览。
>
> 利用javascript解密,可以把运算负担分散到客户端上。窃听者如要窃听每一个页面的内容,则必须要 1 获得密钥 2 用密钥解密内容
>
> 在已知密钥情况下,如客户端的每个页面运算负担为 1 ,页面数量n ,那么窃听者获得密钥之后的运算负担为 1*n。
>
> 为了运算效率,使用小质数作为rsa的p,q,理论上窃听者可以通过因数分解算出密钥,其运算负载为k,注意k 远远大于1。
>
> 如果每个站点使用不同的密钥,共计m个站点,窃听者的运算负担为 m*k+1*n,且负载集中。
>

> 而,如果采用双向可逆加密方法,在得知算法的情况下,窃听者运算负载极小。如果在通过变换算法来增加难度,又无法做到通用,给用户正常浏览造成困难。使用rsa-方法,算法是标准的,用户使用成本很低,窃听成本很高。
>
> 在项目代码中,我已经实现了这一目标。但仍然有效率问题。
>
> 目前问题:
>
> 1 在没有bcmath和gnumath函数的php主机上,php加密内容的运算效率很低。和bcmath差距几十倍。好在大部分情况下,主机都是有bcmath-函数的。这个问题不严重。
> 2 js的bigint运算效率很低,主要是powmod的效率低,而这是rsa解密最频繁的操作。
>
> -------------------------------------------------------------------------------------------------


> 霍炬
> 北京银杏科高信息技术有限公司 http://www.ginkgotek.com
> tel:13911041484 010-63105844

> email:virus...@gmail.com
> gtalk:virus...@gmail.com MSN:huo...@hotmail.com

Jay Shu

unread,
Dec 29, 2009, 1:11:42 AM12/29/09
to pon...@googlegroups.com
密钥都存在页面里面,用rsa也没什么意思了吧,直接base64呗。

2009/12/29 xLight <xblue...@gmail.com>:

est

unread,
Dec 29, 2009, 1:22:55 AM12/29/09
to pon...@googlegroups.com
- -

GFW早就有base64模块了。。。。。

2009/12/29 Jay Shu <jay....@gmail.com>:

Chunlin Zhang

unread,
Dec 29, 2009, 4:00:46 AM12/29/09
to TopLanguage
GFW 对于 base64 我觉得主要还是用在 url 上吧,网页内容里的 base64 估计没有解,一个因为这样做的网页太少( 之前发现
secret.moumentei.com 是这么做的,网页在本地 js 解码(应该是 base64)显示内容,不过刚发现这个网站也维护了),另
外这个也没有啥标准做法

我觉得不一定要用到 rsa 这么重量级的,比较简单的加密方法也可以试试(当然不要到 base64 这样的),毕竟只是骚扰 GFW,最后只要人工
一审核还是要挂.

另外我觉得这种技术可以用在 webproxy 上,但是之前 webproxy 被 GFW 废掉的直接原因是出在 url 上,间接的原因还是因为
网页的内容会触发 GFW reset,所以我想只要想办法解决 url 的反过滤,再加上内容采用楼主的这种技术,webproxy 就应该能在
GFW 下复活了.

On Dec 29, 2:22 pm, est <electronix...@gmail.com> wrote:
> - -
>
> GFW早就有base64模块了。。。。。
>

> 2009/12/29 Jay Shu <jay.sh...@gmail.com>:
>
> > 密钥都存在页面里面,用rsa也没什么意思了吧,直接base64呗。
>
> > 2009/12/29 xLight <xblueli...@gmail.com>:

xLight

unread,
Dec 29, 2009, 4:58:53 AM12/29/09
to TopLanguage
我用过的一个 基于base64和xor运算的 加密传输的方法:
<?php

/**
* 将传出的复杂大量数据压缩编码成为URL-safe的字符串
* 详情可以参见http://php.net/base64_encode 下面的User Contributed Notes
*/
class base64Url{

private static $Pkey = 'fuckGFW';

static public function encode($data){
$data = serialize($data);
$data = preg_replace('/d:([0-9]+(\.[0-9]+)?([Ee][+-]?[0-9]+)?);/e',
"'d:'.((float)$1).';'", $data);//去掉系列化后,浮点数超长的字符
$data = gzdeflate($data,9);
$data ^= str_repeat(self::$Pkey,strlen($data));
$data = strtr(base64_encode($data), '+/=', '-_,');
return $data;
}
static public function decode($data){
$data = base64_decode(strtr($data, '-_,', '+/='));
$data ^= str_repeat(self::$Pkey,strlen($data));
$data = unserialize(gzinflate($data));
return $data;
}
}

> > >>> (1) 主机同时有https和http协议,部分用户通过https协议访问,获得了保护。但也有用户通过http访问,这部分用户会遭到窃听。除非关闭http请求--,全面转向https。
> > >>> (2) 主机并没有https支持。
>
> > >>> 很多情况下,我们需要保证主机安全,最好的办法是将其混入数字森林中。即:这台主机输出的内容没有人能看得懂的,只由无意义的代码和数字组成。用户浏览这台主机--,不会触发任何关键词扫描。甚至该主机连https协议都不使用,更凸显其低调本色。


>
> > >>> 换言之,一个网站如果把自己的内容都变成字母和数字的组合,且不使用https协议,那么他就是数字森林中的一片树叶,丝毫不引人注意。
>
> > >>> 我们的目标应该是传输过程中不引人注意,并非绝对的不可破解的安全。
>
> > >>> 因此这个库的工作流程是:
> > >>> 1 php对"内容"做rsa加密->将加密结果输出到页面上。

> > >>> 2 用户浏览页面,html代码中的"内容"被加密成数字形态。私钥可以直接输出在页面代码中,也可由用户输入一次,保存在cookie中。使用cookie会降低--密钥泄露的危险,更加有效。


> > >>> 3 通过javascript在用户浏览器上将这些数字解密为内容。
> > >>> 4 通过javascript dom来把内容写回到页面上。用户即可浏览。
>
> > >>> 利用javascript解密,可以把运算负担分散到客户端上。窃听者如要窃听每一个页面的内容,则必须要 1 获得密钥 2 用密钥解密内容
>
> > >>> 在已知密钥情况下,如客户端的每个页面运算负担为 1 ,页面数量n ,那么窃听者获得密钥之后的运算负担为 1*n。
>
> > >>> 为了运算效率,使用小质数作为rsa的p,q,理论上窃听者可以通过因数分解算出密钥,其运算负载为k,注意k 远远大于1。
>
> > >>> 如果每个站点使用不同的密钥,共计m个站点,窃听者的运算负担为 m*k+1*n,且负载集中。
>

> > >>> 而,如果采用双向可逆加密方法,在得知算法的情况下,窃听者运算负载极小。如果在通过变换算法来增加难度,又无法做到通用,给用户正常浏览造成困难。使用rsa--方法,算法是标准的,用户使用成本很低,窃听成本很高。
>
> > >>> 在项目代码中,我已经实现了这一目标。但仍然有效率问题。
>
> > >>> 目前问题:
>
> > >>> 1 在没有bcmath和gnumath函数的php主机上,php加密内容的运算效率很低。和bcmath差距几十倍。好在大部分情况下,主机都是有bcmath--函数的。这个问题不严重。
> > >>> 2 js的bigint运算效率很低,主要是powmod的效率低,而这是rsa解密最频繁的操作。
>
> > >>> --------------------------------------------------------------------------------------------------

Jay Shu

unread,
Dec 29, 2009, 8:58:38 PM12/29/09
to pon...@googlegroups.com
只是这么个意思,反正密钥都不保密,还不如直接用对称算法来做了,没必要用不对称的

2009/12/29 est <electr...@gmail.com>:

--
http://j-lite.net/

张慧聪

unread,
Dec 29, 2009, 11:36:45 PM12/29/09
to pon...@googlegroups.com
我想,如果提高效率的话,一是算法可以更简单一些,只要满足一头加密一头解密就行了;二是可以只对最核心的内容加密,这样可能还能够减轻还原时的负担;第三,php效率低的话,这里可以考虑用C在实现。
--
----文艺型程序员+围棋偶饭+SC剩菜饭+前科幻迷+数学习饭

est

unread,
Dec 30, 2009, 9:36:05 AM12/30/09
to pon...@googlegroups.com
这里提高了效率,gfw的模块也就提高了效率。

2009/12/30 张慧聪 <zhcfr...@gmail.com>:

Chunlin Zhang

unread,
Dec 30, 2009, 9:38:53 PM12/30/09
to pon...@googlegroups.com
我的看法是 GFW 的过滤因为要处理巨量的信息,只能采用比较死板的做法,不可能对巨量的信息都进行深度包检测的,所以只要加密的方法足够灵活多变(最好能像病毒的变种那样多变,呵呵),就可以给
GFW 造成很大的麻烦,最好能做成每次生成的 js 都不一样,这样就更难抓住特征加以过滤了.

2009/12/30 est <electr...@gmail.com>:

Kenny Yuan

unread,
Dec 30, 2009, 10:25:28 PM12/30/09
to pon...@googlegroups.com
没错,想找GFW的麻烦,就是要在时间和空间两方面想办法:
时间上,让GFW超负荷并不难,就看有多少server和浏览器参与了;
而空间上的消耗也很容易让GFW吃不消:因为密文和BASE64不一样,GFW需要缓存大量的数据包才能检则明文的内容;
用了加密算法之后,GFW想及时地插入10060也几乎是不可能的了,总会滞后一些时间,而10060是GFW的命根子。


2009/12/30 est <electr...@gmail.com>

est

unread,
Dec 30, 2009, 10:29:01 PM12/30/09
to pon...@googlegroups.com
说道在空间上想办法,那么最简单的加密方法就是把字节流顺序打乱使之无法顺序读取而必须缓存大量数据。服务器和浏览器开销又小。

2009/12/31 Kenny Yuan <yuank...@gmail.com>:

张沈鹏

unread,
Dec 30, 2009, 10:54:40 PM12/30/09
to pon...@googlegroups.com
中国的武家, 为了避免被禁武的当局发现自己在练武, 纷纷借用道家学说来掩盖武功的练法, 所以你看一本古代的武功秘籍, 里面一大堆阴阳啊,
五行啊, 千万不要奇怪, 那些都是为了保证这本书被警察看到的时候不至于让书的持有人满门抄斩才这么写的。用时髦的话来说,
道家的隐语成了军用密码。例如“吕洞宾”“吕纯阳”, “吕祖”这些词指的都是男人的小鸡鸡。 (洞里的客人)
这些军用密码, 在上一代的武术家都还有很多能翻译, 但是到了我们这一代, 能翻译的人就越来越少了。还有些乱翻译的人 (好吧,
我是在说我自己) , 搞得秘笈出版界一片混乱。
读者们只需要明白, 当两个元朝/清朝初期的武术家在谈论“阴随以无厚入海”这种莫名其妙的话, 其实是在谈悄悄地背后用刀插入对方小鸡鸡附近的暗杀技术。就好了。

jun lin

unread,
Dec 30, 2009, 11:26:05 PM12/30/09
to pon...@googlegroups.com
土匪黑话。。。。
好吧,我们混IT的也会。
hello kitty,硬盘,影帝,太祖,8*8,功夫网。。。。

2009/12/31 张沈鹏 <zsp...@gmail.com>

WindyWinter

unread,
Dec 30, 2009, 10:31:14 PM12/30/09
to pon...@googlegroups.com
乱字节流可能触发别的关键字。
Soli Deo gloria,
yours WindyWinter
and http://www.briefdream.com


2009/12/31 est <electr...@gmail.com>

est

unread,
Dec 31, 2009, 3:52:18 AM12/31/09
to pon...@googlegroups.com
按照这个理论电影文件等二进制格式也有偶然触发关键字的可能性。就算加密过后的文件也不能做到绝对避免触发现有关键字。

关键是这个概率太小了。

2009/12/31 WindyWinter <bsl...@gmail.com>:

刘海

unread,
Jan 16, 2010, 6:53:40 AM1/16/10
to pon...@googlegroups.com
这个是什么页面的测试结果呢?

2009/12/29 xLight <xblue...@gmail.com>
Reply all
Reply to author
Forward
0 new messages