关于 AES 加密,从 js 到 php 的问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
polandeme
V2EX    问与答

关于 AES 加密,从 js 到 php 的问题。

  •  
  •   polandeme 2015-09-23 08:12:42 +08:00 5727 次点击
    这是一个创建于 3747 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 AES 加密传输数据,加解密可以实现,但是有个疑问:

    1. 使用 aes 加密的原因就是密文传输,被拦截抓包也没法解密,但是 key , iv 都是被一起传输过去的,也会被同时拦截下来,这样同样可以破解和明文并没有差距呀。

    2. 就算是我 key 是随机的,且单独传输,但是为了保持前后端 key 一致,也是要传输 key 的呀。难道前后端使用一个相同的算法生成 key ,但这样生成 key 算法前端是可见的。

    33 条回复    2015-09-24 10:17:23 +08:00
    Septembers
        1
    Septembers  
       2015-09-23 08:21:29 +08:00 via Android
    1. 请使用 HTTPS
    2. 请看《应用密码学》
    c742435
        2
    c742435  
       2015-09-23 08:29:13 +08:00
    楼主的目的是什么?
    WalkingEraser
        3
    WalkingEraser  
       2015-09-23 08:32:29 +08:00
    具体 JS 还没机会弄过,但密码学中有密钥交换保证 key 的可靠传输
    polandeme
        4
    polandeme  
    OP
       2015-09-23 08:32:36 +08:00
    @c742435 用户信息在传输过程中加密,被抓包拦截任然无法破解
    polandeme
        5
    polandeme  
    OP
       2015-09-23 08:33:03 +08:00
    @Septembers
    @WalkingEraser 谢谢,去看一下密码学相关的东西
    c742435
        6
    c742435  
       2015-09-23 08:37:48 +08:00
    @polandeme 你是怕信息被当前用户抓包,还是被中间人抓包?
    防中间人直接用 https 可破,防用户的话找个非对称加密算法的库吧。
    gaohongyuan
        7
    gaohongyuan  
       2015-09-23 08:39:46 +08:00
    密钥交换不会直接明文传,有专门算法的,比如 Diffie-Hellman 。想破解就中间人攻击
    polandeme
        8
    polandeme  
    OP
       2015-09-23 08:43:42 +08:00
    @c742435 主要是防止中间人抓包,没对 https 有过细节的了解, https 实质也是使用非对称加密吧。
    ehs2013
        9
    ehs2013  
       2015-09-23 08:44:29 +08:00
    无论怎么样,都必须要有个 100% 可信任的东西,就看你信任什么了。
    wy315700
        10
    wy315700  
       2015-09-23 08:47:11 +08:00 via Android
    ECDHE
    c742435
        11
    c742435  
       2015-09-23 08:48:03 +08:00
    @polandeme 对。不过 https 的公钥是从服务器下发的。所以 [用户] 可以通过中间人程序修改公钥 /查看传输的内容(前提是信任中间人的证书)。
    polandeme
        12
    polandeme  
    OP
       2015-09-23 08:48:15 +08:00
    @ehs2013 理论上是什么都不会去 100%信任的,所以只能去取舍找个相对安全方式
    wy315700
        13
    wy315700  
       2015-09-23 08:50:31 +08:00 via Android
    @c742435 可以把公钥或者 CA 写死。
    polandeme
        14
    polandeme  
    OP
       2015-09-23 08:51:22 +08:00
    @c742435 “不过 https 的公钥是从服务器下发的” ,那这句假如我用现在的这种 aes 方式,每次发送数据之后服务器下发一个新的 key ,这两种方式的区别在于什么。非对称?
    FrankFang128
        15
    FrankFang128  
       2015-09-23 08:52:11 +08:00 via Android
    看下 HTTPS 的原理呀
    polandeme
        16
    polandeme  
    OP
       2015-09-23 08:53:04 +08:00
    @FrankFang128 恩恩,正在看
    yuriko
        17
    yuriko  
       2015-09-23 09:04:31 +08:00
    AES 是对称加密,密钥同时用来加密和解密,一般使用在双方都拥有密钥的前提下。
    还有种加密叫非对称加密,比如 RSA 这种,加密和解密用不同的密钥(公钥、私钥),发送方用公钥加密,接收方用对应的私钥解密。
    由于非对称加密普遍计算量较大,一般都是先用非对称加密交换对称密钥,然后用对称加密进行通信
    feather12315
        18
    feather12315  
       2015-09-23 09:12:48 +08:00 via Android
    https 验证过程与证书颁发机构通信,确认密钥。
    Ghoul2005
        19
    Ghoul2005  
       2015-09-23 09:24:53 +08:00 via iPhone
    Https 是完整的解决方案,不然的话你得自己实现身份验证,密匙交换,传输加密等多个过程,等于自己把 https 的整套方案实现了一次。
    Marfal
        20
    Marfal  
       2015-09-23 09:32:25 +08:00
    《图解密码学》
    没什么数学要求
    mengzhuo
        21
    mengzhuo  
       2015-09-23 09:46:09 +08:00
    楼上的都说 HTTPS 是解决方案
    可楼主并没有说是什么传输方式,所以不应该是 TLS 么

    不管什么方式交换密钥,都需要“无条件”信任某个第三方,在 X509 里,就是所谓的 CA 了
    konakona
        22
    konakona  
       2015-09-23 10:03:09 +08:00
    KEY 和 IV 不应该一起传输,为什么要一起传输我真心没搞明白……哎!
    polandeme
        23
    polandeme  
    OP
       2015-09-23 10:11:18 +08:00
    @konakona 不对,应该是传输的知识加密后的数据,但是对于前端层面来说,用户或者中间人还是可以找到 key ,和 iv 的。
    oott123
        24
    oott123  
       2015-09-23 10:12:34 +08:00 via Android
    AES 对称,再怎么加密也并无卵用…
    就算你用 rsa ,你的 http 是明文的,中间人可以拦截你下发的 key ,改成自己的。
    Web 安全靠 js 做是不可信的,上 https 吧。
    glasslion
        25
    glasslion  
       2015-09-23 11:49:01 +08:00
    不要重复造轮子,更不要造密码学相关的轮子, LZ 自己去实现一类类似 TLS 的东西, 100%是有漏洞的
    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/
    polandeme
        26
    polandeme  
    OP
       2015-09-23 13:31:31 +08:00
    @glasslion 自己目前只是涉及到应用层的东西,应该不会去早密码学相关的轮子,但是会去了解现有轮子的本质。 thx
    glasslion
        27
    glasslion  
       2015-09-23 13:44:17 +08:00
    @polandeme 应用层恰恰是仅次于加密算法实现,第二容易出错的。至于了解现有轮子的本质, 即使是对口专业的,没个十几年经验,也做不到
    polandeme
        28
    polandeme  
    OP
       2015-09-23 15:48:59 +08:00
    @glasslion 看来我把它想简单了
    polandeme
        29
    polandeme  
    OP
       2015-09-23 20:46:40 +08:00
    @yuriko
    会有个问题吧,最后一步都是使用 aes 加密传输,所以这个过程中会传输, data, iv ,key 加密之后的数据, key,iv 会在第一次加密过,但是中间人还是可以得到我的 js 文件,也会破解出我的 key,iv 明文,最后会在对称加密过程中破解出信息明文。
    感觉这种可能还没有 rsa 直接加密安全或者效率高吧。
    或者你的意思是: key , iv 不在 js 中,是根据用户填写得到的?
    但是无论哪个,还没有直接使用 rsa 效率高的吧。我只是用户名和密码。
    loggerhead
        30
    loggerhead  
       2015-09-24 07:12:08 +08:00 via iPhone
    1 由客户端发起通信
    2 客户端用非对称加密的公钥加密对称加密的密钥传给服务器,对称加密的密钥每次随机产生
    3 用对称加密加密需要传输的数据
    yuriko
        31
    yuriko  
       2015-09-24 08:21:55 +08:00
    @polandeme RSA 这种非对称加密的好处就在于,即使公钥暴露也不影响安全,所以第一步交换密钥的安全性问题就不存在了。
    但 RSA 的性能相对较差,大量采用 RSA 会造成服务器的性能问题,所以真正进行大规模通信的时候还是要走 AES 。
    那 AES 的问题在哪里呢,就是第一步交换密钥的安全性如何保证, RSA 能解决这个问题。
    所以现在一般是用 RSA 作为 AES 的第一步,通过 RSA 交换随机生成的 AES 密钥,然后再通过 AES 进行通信,就解决问题了
    polandeme
        32
    polandeme  
    OP
       2015-09-24 09:30:31 +08:00
    @yuriko 恩恩,可能开始忽略了随机这个概念
    konakona
        33
    konakona  
       2015-09-24 10:17:23 +08:00
    @polandeme 不会啊……=..= 你是怎么得出这个结论滴
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2632 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 12:58 PVG 20:58 LAX 04:58 JFK 07:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86