polandeme
V2EX  ›  问与答

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

  •  
  •   polandeme · Sep 23, 2015 · 5969 views
    This topic created in 3889 days ago, the information mentioned may be changed or developed.

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

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

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

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

    不管什么方式交换密钥,都需要“无条件”信任某个第三方,在 X509 里,就是所谓的 CA 了
    konakona
        22
    konakona  
       Sep 23, 2015
    KEY 和 IV 不应该一起传输,为什么要一起传输我真心没搞明白……哎!
    polandeme
        23
    polandeme  
    OP
       Sep 23, 2015
    @konakona 不对,应该是传输的知识加密后的数据,但是对于前端层面来说,用户或者中间人还是可以找到 key ,和 iv 的。
    oott123
        24
    oott123  
       Sep 23, 2015 via Android
    AES 对称,再怎么加密也并无卵用…
    就算你用 rsa ,你的 http 是明文的,中间人可以拦截你下发的 key ,改成自己的。
    Web 安全靠 js 做是不可信的,上 https 吧。
    glasslion
        25
    glasslion  
       Sep 23, 2015
    不要重复造轮子,更不要造密码学相关的轮子, LZ 自己去实现一类类似 TLS 的东西, 100%是有漏洞的
    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/
    polandeme
        26
    polandeme  
    OP
       Sep 23, 2015
    @glasslion 自己目前只是涉及到应用层的东西,应该不会去早密码学相关的轮子,但是会去了解现有轮子的本质。 thx
    glasslion
        27
    glasslion  
       Sep 23, 2015
    @polandeme 应用层恰恰是仅次于加密算法实现,第二容易出错的。至于了解现有轮子的本质, 即使是对口专业的,没个十几年经验,也做不到
    polandeme
        28
    polandeme  
    OP
       Sep 23, 2015
    @glasslion 看来我把它想简单了
    polandeme
        29
    polandeme  
    OP
       Sep 23, 2015
    @yuriko
    会有个问题吧,最后一步都是使用 aes 加密传输,所以这个过程中会传输, data, iv ,key 加密之后的数据, key,iv 会在第一次加密过,但是中间人还是可以得到我的 js 文件,也会破解出我的 key,iv 明文,最后会在对称加密过程中破解出信息明文。
    感觉这种可能还没有 rsa 直接加密安全或者效率高吧。
    或者你的意思是: key , iv 不在 js 中,是根据用户填写得到的?
    但是无论哪个,还没有直接使用 rsa 效率高的吧。我只是用户名和密码。
    loggerhead
        30
    loggerhead  
       Sep 24, 2015 via iPhone
    1 由客户端发起通信
    2 客户端用非对称加密的公钥加密对称加密的密钥传给服务器,对称加密的密钥每次随机产生
    3 用对称加密加密需要传输的数据
    yuriko
        31
    yuriko  
       Sep 24, 2015
    @polandeme RSA 这种非对称加密的好处就在于,即使公钥暴露也不影响安全,所以第一步交换密钥的安全性问题就不存在了。
    但 RSA 的性能相对较差,大量采用 RSA 会造成服务器的性能问题,所以真正进行大规模通信的时候还是要走 AES 。
    那 AES 的问题在哪里呢,就是第一步交换密钥的安全性如何保证, RSA 能解决这个问题。
    所以现在一般是用 RSA 作为 AES 的第一步,通过 RSA 交换随机生成的 AES 密钥,然后再通过 AES 进行通信,就解决问题了
    polandeme
        32
    polandeme  
    OP
       Sep 24, 2015
    @yuriko 恩恩,可能开始忽略了随机这个概念
    konakona
        33
    konakona  
       Sep 24, 2015
    @polandeme 不会啊……=..= 你是怎么得出这个结论滴
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2972 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 100ms · UTC 04:22 · PVG 12:22 · LAX 21:22 · JFK 00:22
    ♥ Do have faith in what you're doing.