V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
realfreesky
V2EX  ›  程序员

如果不使用 https,能有什么方法完成安全传输么

  •  
  •   realfreesky · 2017-08-29 09:43:52 +08:00 · 10740 次点击
    这是一个创建于 2642 天前的主题,其中的信息可能已经有所发展或是发生改变。
    84 条回复    2017-09-29 17:53:28 +08:00
    ggbond1989
        1
    ggbond1989  
       2017-08-29 09:50:54 +08:00
    那就只能自己实现密钥协商,加密传输的整个过程了,https 应该是最简单的办法了吧。
    Famio
        2
    Famio  
       2017-08-29 09:51:20 +08:00 via iPhone
    要不然怎么会有 https
    nullen
        3
    nullen  
       2017-08-29 09:51:39 +08:00   ❤️ 1
    XinLake
        4
    XinLake  
       2017-08-29 09:57:25 +08:00
    你要安全可以这样,自加密所有数据,使用 Socket 连接进行传输,绕开所有上层协议
    paradoxs
        5
    paradoxs  
       2017-08-29 10:01:30 +08:00
    可以参考 telegram 的开源传输协议 MTproto, 就可以不使用 HTTPS 完成安全传输.
    baskice
        6
    baskice  
       2017-08-29 10:07:17 +08:00
    PGP 加密,双因素传递公钥。但是这样还是没法解决中间人攻击
    wwqgtxx
        7
    wwqgtxx  
       2017-08-29 10:07:52 +08:00 via iPhone
    用 websocket 自己封装
    clino
        8
    clino  
       2017-08-29 10:17:33 +08:00
    ssh 也可以啊
    miaomiao0323
        9
    miaomiao0323  
       2017-08-29 10:18:57 +08:00
    https 的主要功能是加密和签名,加密有两部分,对数据的对称加密,和对证书的非对称加密,用来防止数据泄漏;签名主要是做散列,用来做身份认证和防窃听,所以你只要自己实现了对数据的加密,并且添加个数字签名,基本就可以实现 https 的功能。
    jlsk
        10
    jlsk  
       2017-08-29 10:32:20 +08:00   ❤️ 5
    不予置证书、密钥、乱码本等等是无法防中间人的
    在经典世界这是常识
    想要打破上面的桎梏,你只能去找潘建伟了,可以借他的量子卫星用用
    那个不用预置,现用现传都可以

    貌似很多小白连证书认证体系的关注点在哪儿都不知道就声称自己实现了一套安全传输,你在最开始就被中间人了你连传输的公钥都是被替换的你明不明白?
    比如这货: http://www.williamlong.info/archives/4346.html

    再强调一遍,你研究安全传输如果是在计算机科学领域那就不用浪费时间做无用功了,不予置的数字安全传输就是个永动机,根本不可能实现
    想研究,请去量子力学领域找方法
    Quaintjade
        11
    Quaintjade  
       2017-08-29 10:35:55 +08:00
    https 或者说公开的 pki 体系最大的好处是,你不必和每一个你访问的网站提前通过其他安全方式预先交换约定信息。其次是容易使用和性能高,你自己写的话需要考虑防范各种漏洞和性能优化。
    porrat
        12
    porrat  
       2017-08-29 10:42:14 +08:00
    TLS
    jarlyyn
        13
    jarlyyn  
       2017-08-29 10:43:02 +08:00
    vpn?
    AckywOw
        14
    AckywOw  
       2017-08-29 10:45:51 +08:00
    那就脱裤子放屁,自己搞一套效果一样的
    Sullivan
        15
    Sullivan  
       2017-08-29 10:46:39 +08:00
    U 盘 手递手 给?
    Bink10533
        16
    Bink10533  
       2017-08-29 10:48:16 +08:00
    @Sullivan 这个好,可以彻底防止中间人攻击 hhh
    xiaoc19
        17
    xiaoc19  
       2017-08-29 10:59:56 +08:00
    按照 TLS 的过程实现一遍?那跟 TLS 有什么区别?
    或者放到移动硬盘 私下见面传输?
    Quaintjade
        18
    Quaintjade  
       2017-08-29 11:11:15 +08:00
    @Sullivan
    线下也能中间人,关键还是在于仔细确认对方身份(比如事先认识或者出示身份证)
    https://www.v2ex.com/t/281763
    mrsatangel
        19
    mrsatangel  
       2017-08-29 11:11:45 +08:00
    感觉是某厂的面试题
    bumz
        20
    bumz  
       2017-08-29 11:14:27 +08:00
    如果不用 https,那就自己实现一套和它一样的机制,最重要的是事先交换身份验证信息,以免中间人 233
    Sullivan
        21
    Sullivan  
       2017-08-29 11:17:43 +08:00
    @Quaintjade 有。。有道理。。。防不胜防啊 那就加个暗号 “江西佬在哪?” “江西佬在我家”
    v9ox
        22
    v9ox  
       2017-08-29 11:22:24 +08:00
    自备 U 盘 快马加鞭
    7654
        23
    7654  
       2017-08-29 11:29:00 +08:00   ❤️ 1
    --天王盖地虎
    --宝马镇河妖
    ……
    --你是 XX
    --你是 OO
    --这里有份东西你拿一下
    hxndg
        24
    hxndg  
       2017-08-29 11:32:10 +08:00
    @Sullivan But where do u get that cipher? So the problem always exist.jlsk is right
    ryd994
        25
    ryd994  
       2017-08-29 11:34:25 +08:00 via Android
    HTTPS 不过是 HTTP+TLS 而已。
    如果你不想用 HTTP,还是可以用 TLS 的。TLS 可以配合 TCP 或 UDP 食用。
    窃以为 TLS 是安全通讯的最基本实现。自己重造轮子,考虑各种问题后,就和 TLS 差不了多少了。还不说自己实现会遇到多少坑。
    ryd994
        26
    ryd994  
       2017-08-29 11:36:34 +08:00 via Android
    @clino ssh 第一次使用不防中间人

    @Sullivan U 盘手递手一样可以中间人。不说各种神偷电影,上次不还有人咸鱼面交被中间人的吗?花样多了去了。
    wweir
        27
    wweir  
       2017-08-29 12:18:34 +08:00 via Android
    sctp 走一波,如何
    zhx1991
        28
    zhx1991  
       2017-08-29 12:23:55 +08:00
    手动实现一遍 https 呗
    xucheng
        29
    xucheng  
       2017-08-29 12:44:45 +08:00 via iPad
    @jlsk 量子加密只防窃听,不防中间人。所以任然需要证书签名。
    tony1016
        30
    tony1016  
       2017-08-29 13:03:07 +08:00
    $$,你懂的
    Firedoge
        31
    Firedoge  
       2017-08-29 13:15:52 +08:00 via Android
    参考 L2TP/IPsec,Cisco IPsec,IKEv2
    realfreesky
        32
    realfreesky  
    OP
       2017-08-29 15:35:19 +08:00
    @tony1016 这是啥意思....不太懂
    XiaoFaye
        33
    XiaoFaye  
       2017-08-29 16:14:35 +08:00
    这有什么难,直接 RAR 加密码分段压缩,然后二进制传输过去,再一个电话告诉对方密码就行。
    andrewhxism
        34
    andrewhxism  
       2017-08-29 16:24:27 +08:00
    @XiaoFaye #33 所以电话如何防窃听?
    andrewhxism
        35
    andrewhxism  
       2017-08-29 16:25:47 +08:00
    @XiaoFaye #33 以及如何确认电话那一端的身份,还有如何保证通信质量让对方能听到密码,这几个问题就是 https 的核心。
    mengzhuo
        36
    mengzhuo  
       2017-08-29 16:26:41 +08:00
    可以用 QUIC 哦~
    Sullivan
        37
    Sullivan  
       2017-08-29 16:30:36 +08:00
    @ryd994 嗯 见面对个暗号吧 详情见上面几楼
    tabris17
        38
    tabris17  
       2017-08-29 16:32:40 +08:00
    SSL
    Sullivan
        39
    Sullivan  
       2017-08-29 16:33:25 +08:00
    @hxndg 约在哪面交的时候就 先说好 暗号呀
    rogerchen
        40
    rogerchen  
       2017-08-29 17:07:14 +08:00 via Android
    @xucheng 窃听都做不到,怎么进行中间人攻击?
    silencefent
        41
    silencefent  
       2017-08-29 17:07:53 +08:00
    zip rar 加密传播
    hxndg
        42
    hxndg  
       2017-08-29 17:11:00 +08:00
    @Sullivan
    When u negotiating the code,u need to be sure the person is who u real want to meet.
    So u need another cipher to check the identity.
    In a another word,MITM always exist
    nodin
        43
    nodin  
       2017-08-29 17:27:40 +08:00 via Android
    自己先封装加密,对方再解密。
    paw
        44
    paw  
       2017-08-29 17:29:14 +08:00
    @tony1016 $$ 从最初设计的出发点开始就不是为了加密和安全... 不防篡改 /重放 /选择密文等好多已知的攻击方式。后来出了一个带 hmac 校验的版本,能防一点,后来又给移除了~~
    w7938940
        45
    w7938940  
       2017-08-29 17:33:06 +08:00
    AES + RSA
    XiaoFaye
        46
    XiaoFaye  
       2017-08-29 17:35:18 +08:00
    @andrewhxism 尽量用苹果手机,还有移动的电话卡,基本就没问题了。:)
    pexcn
        47
    pexcn  
       2017-08-29 17:39:10 +08:00
    楼主可以自己造一门自然语言来通信
    andrewhxism
        48
    andrewhxism  
       2017-08-29 17:51:17 +08:00
    @XiaoFaye #46 666
    williamx
        49
    williamx  
       2017-08-29 18:55:37 +08:00
    有很多方法啊!但是,你想要干嘛?
    realfreesky
        50
    realfreesky  
    OP
       2017-08-29 20:44:35 +08:00
    @williamx 只是突然开了个脑洞
    Sullivan
        51
    Sullivan  
       2017-08-29 22:15:36 +08:00
    @hxndg 这个。。。按照你的这个逻辑,只要用到了其他通讯方式就无解了,所以要跳脱这个死胡同,用要传递的东西本身作为验证,比如我要给你的 U 盘装的是几个什么片,你事先知道,这事只有我俩知道,那面交的时候悄悄地对一下内容就 ok 了,这样的话 即使是 事先用其他通讯工具交流过,也不过是交流面交的地点和时间,应该算是安全的,中间人不知道验证内容。
    likuku
        52
    likuku  
       2017-08-29 22:19:46 +08:00
    光纤拉物理点对点线路,收发依然端对端加密,密钥或许可用一对纠缠的量子状态,每一次发包都换一对密钥。
    hxndg
        53
    hxndg  
       2017-08-29 22:22:30 +08:00
    @Sullivan 你还是没有明白楼上几位到底在说什么,你去搜一下 differ-helman,看一下它的历史就知道什么意思了。
    任何预制的知识都可能是中间人的欺骗,这就是为什么我们需要 CA 的原因
    datocp
        54
    datocp  
       2017-08-29 22:31:42 +08:00
    stunnel.org 看看。3 张证书的加密过程。。。加密链路 /服务器验证客户端身份 /客户端验证服务器身份 ,偶尔线路不能访问的时候去掉 客户端验证服务器身份 就正常了,这难道就是传说中的 中间人 攻击?因为是基于 pki 的,所以可以动态变换证书。反正觉得蛮安全的。

    客户端配置
    cert = 1.pem
    verify=2
    CAfile = stunnel.pem

    服务器端
    requireCert=yes
    verifyChain=yes
    verifyPeer=yes
    ryd994
        55
    ryd994  
       2017-08-29 23:26:49 +08:00 via Android
    @Sullivan #37 #39 那你怎么协商暗号呢?用咸鱼?那不就绕回来了么?
    #51 这事只有我俩知道,这就很难实现。你怎么保证我俩就是我俩而不是别人?如果说我们从小相识,而且一直有联系,而且其他朋友能佐证,那确实不太可能是假的。如果我掏出身份证,而且能证明这张证是真的,而且照片对得上,那确实不太可能是假的。顺带一提,前者是 PGP 的思路,后者是 PKI 的思路。

    两个原本不怎么熟的人,想要中间人有的是办法。看过碟中谍 4,毒贩在帆船酒店面交被中间人么?
    ryd994
        56
    ryd994  
       2017-08-29 23:29:27 +08:00 via Android
    @Sullivan 说天王盖地虎,那杨子荣是怎么混进去的?
    t6attack
        57
    t6attack  
       2017-08-29 23:37:56 +08:00
    非对称加密 发明出来的目的就是干这个用的。https 也是基于非对称加密。
    最有名的两个,RSA、ECC 算法,你自己用它们加密解密数据就是了。
    lights
        58
    lights  
       2017-08-30 00:55:10 +08:00 via iPhone
    今天刚听说 tls
    lanwairen123
        59
    lanwairen123  
       2017-08-30 07:08:01 +08:00 via Android
    比较好奇微信
    lanwairen123
        60
    lanwairen123  
       2017-08-30 07:09:09 +08:00 via Android
    比较好奇微信的消息是怎么加密的,发消息的接口是 http 的,截获的内容是加密的
    cctrv
        61
    cctrv  
       2017-08-30 07:13:47 +08:00 via iPhone
    要先定義「安全」
    在 5 天內安全?在 3 年內安全?

    RSA 之類的通信密文也可以通過暴力破解解密。

    絕對安全就是脫離網絡。

    相對安全有很多個辦法了,你要做對稱加密還是非對稱加密,多少位的加密,就是看你可以「相對安全」多久而已。
    c4dfan
        62
    c4dfan  
       2017-08-30 08:15:05 +08:00
    来个量子通信呗。。。。
    外行瞎掺和。。。
    (逃。。。
    ryd994
        63
    ryd994  
       2017-08-30 08:26:48 +08:00
    @t6attack 实际加密通讯比单纯数据加密算法要复杂得多
    数据加密是一环,密钥分发是一环,还有实现本身要抗旁通道分析,还有社工
    所以这是一个工程整体,破了一个就全没意义了
    防守比进攻难得多,因为进攻只要打通一条路就是成功
    fox0001
        64
    fox0001  
       2017-08-30 08:38:21 +08:00
    @silencefent #41 哈哈,我也想到这个
    ryd994
        65
    ryd994  
       2017-08-30 08:52:25 +08:00
    @silencefent zip 加密不过是 AES 而已,还是解决不了中间人,这是密钥分发阶段的问题。
    @fox0001
    torbrowserbridge
        66
    torbrowserbridge  
       2017-08-30 08:57:47 +08:00
    @wwqgtxx websocket 只能实现部分安全
    tempdban
        67
    tempdban  
       2017-08-30 09:11:34 +08:00
    kcp 啊
    tony1016
        68
    tony1016  
       2017-08-30 09:25:12 +08:00
    @paw 你可以看一下最新的 AEAD 的协议,基本很安全了
    silencefent
        69
    silencefent  
       2017-08-30 09:26:45 +08:00
    @ryd994 “不过” “而已” 拜托先实现。广义来说,只要观察者存在,产生的密码都可能泄漏
    hxndg
        70
    hxndg  
       2017-08-30 09:39:37 +08:00
    @cctrv Perfect forward secrecy help a lot.
    And we are not talking about philosophy,his security should be same with others .
    Sullivan
        71
    Sullivan  
       2017-08-30 10:07:37 +08:00
    @ryd994 嗯 如果还用到了其他通讯方式 就没法保证
    flynaj
        72
    flynaj  
       2017-08-30 10:31:05 +08:00 via Android
    ssh 就可以了,他说安全传输又又没有说 http
    bfbd
        73
    bfbd  
       2017-08-30 13:48:23 +08:00
    HTTPS 只是通过浏览器内置秘钥完成了秘钥预分发而已。你可以通过微信、短信等任意渠道分发你自己的秘钥,然后加密通信,原理是一样的。
    jininij
        74
    jininij  
       2017-08-30 13:59:55 +08:00 via iPhone
    客户端信任证书,由证书签署公钥,用公私钥交换对称秘钥,用对称秘钥通讯。这是 https 的通讯系统。http 下,客户端信任证书,第一条都无法实现,更别说用 http 实现 https 了。
    在不安全的网络中,两个完全不知道对面任何私密信息的节点,想相互建立安全通讯是绝对不可能的。
    有三种可能,一,两个要通讯的节点知道一条秘密,其他人都不知道。二,两个节点都至少相信一个第三方。三,数据到达对方未被篡改的概率大于 50%。
    在 http 下建立安全通讯是不可能的。
    实际应用时考虑绝对安全没有意义,根据需求,实际需求中,做一下非对称加密交换秘钥,已经可以抵御非针对性的监听和中间人了。
    hjc4869
        75
    hjc4869  
       2017-08-30 14:04:28 +08:00
    客户端可以,网页不行
    Coxxs
        76
    Coxxs  
       2017-08-30 14:11:03 +08:00
    @lanwairen123 微信预置了服务器的公钥,公钥的安全通过 apk 包签名、代码混淆来尽量保证。
    lanwairen123
        77
    lanwairen123  
       2017-08-30 14:53:33 +08:00 via Android
    @Coxxs 如果是这样的话公钥应该早就被人找出来了吧,我没找见网上有微信消息的解密方法公布呀
    Coxxs
        78
    Coxxs  
       2017-08-30 16:53:27 +08:00 via Android
    @lanwairen123 我说的安全是指避免公钥被篡改.. 公钥本身当然可以找到
    kobe1941
        79
    kobe1941  
       2017-08-30 17:04:02 +08:00
    这个像是面试的问题。。。
    HTTPS 是应用层的加密协议,光应用层的加密协议还有其他的,而且除了应用层,比如传输层,网络层,数据链路层,各有各的加密方式,见这里
    Williamp
        80
    Williamp  
       2017-08-30 17:08:21 +08:00
    @realfreesky I don't think there is any other safe way except https to achieve safe transmission. And @porrat TLS is newer version of SSL only. This resource https://www.clickssl.net/blog/an-easy-to-understand-guide-ssl-tls-https-ssl-certificate-and-https will help you undersatand both terms in deeper.
    inflationaaron
        81
    inflationaaron  
       2017-08-31 07:11:23 +08:00
    @ryd994 所以说交易的时候还是需要一个双方都信任的中间机构来建立信任链。这相当于把我对你的认证,转移到中间机构对你的认证,然后我再信任这一认证结果。
    cortexm3
        82
    cortexm3  
       2017-08-31 08:32:20 +08:00 via iPhone
    Ipse   c
    ryd994
        83
    ryd994  
       2017-08-31 09:49:08 +08:00 via Android
    @inflationaaron 但是这个中间机构不一定是中心化的,gpg 就是这个想法。通过人际关系网。主要是,如果所有通讯都一对一直接验证身份的话,成本太高了,甚至不可能。比如开源软件开发者,不可能和每一个用户面对面交换
    Jennykale
        84
    Jennykale  
       2017-09-29 17:53:28 +08:00
    I guess in place of https there is no such option available for safe transmission. HTTPS is the most secure way it works on SSL/TLS certificate. Both the certificate will work on PKI system. Anything which is encrypted via private key will be decrypted by public key only or vice versa. And as the price concerned, if you purchase SSL certificate from Reseller then you can get the certificate at the cheap price. You can check the below link.
    https://www.safecyberssl.com/single-domain-ssl/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3359 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:46 · PVG 12:46 · LAX 20:46 · JFK 23:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.