技术全球化的转向 - 华为禁令有感

0. 前言

在科技领域,特别是互联网和通信领域,有几个神话

  • 美国科技企业可以不跟政府合作,甚至对着干
  • 美国政府不干预市场,市场主体自己调节
  • 美国是开放国家,谁都可以去做生意

第三点可能说服力不大够,因为美国政府确实经常否决各种收购,以及“窗口指导”不让美国运营商采购华为产品。

但是前面两点,是美国企业用自己的行动,实实在在打出来的名声。比如苹果拒绝给 FBI 解锁。Google、Facebook 起诉美国政府等。

另一方面,长久以来,美国政府也确实按照法律行事。苹果说不给解密,还愣是拿它没办法。

这些行动产生了道德号召力与一致性预期。大家认可这套游戏规则。这也是为什么 Google 宣布退出中国的时候,中国政府遭受一致批评。在前段时间,中兴因为违反对伊朗的出口禁令,被美国政府按在地上摩擦,又是交罚款,又是整改董事会。然而在中文网络世界,我看到的基本都是在嘲笑中兴,做事不密被人抓包,简直活该。

1. 贸易战与制裁

中美之间的贸易战,从 2016 年以来,已经断断续续持续很久。不是没有影响,但是还在可控范围,你给我加关税,我报复你也加征关税,一会儿又暂停,一会儿又磋商的。看似炮火隆隆,毕竟还有规矩。

然而在 5 月 16 号,特朗普签署行政命令,宣布美国进入紧急状态,在此紧急状态下,美国企业不得使用对国家安全构成风险的企业所生产的电信设备。

同一天,BIS 把华为及其子公司列入实体清单(Entity List),所有美国公司都要申请特殊许可才可以对华为出口。

一套组合拳,直接把华为往死里打,虽然由于历届政府阻挠,华为在美国的电信运营商市场并没有任何业务。前段时间甚至高调宣布放弃美国市场。

In this rule, the Bureau of Industry and Security (BIS) amends the Export Administration Regulations (EAR) by adding Huawei Technologies Co., Ltd. (Huawei) to the Entity List. The U.S. Government has determined that there is reasonable cause to believe that Huawei has been involved in activities contrary to the national security or foreign policy interests of the United States. BIS is also adding non-U.S. affiliates of Huawei to the Entity List because those affiliates pose a significant risk of involvement in activities contrary to the national security or foreign policy interests of the United States. Huawei will be listed on the Entity List under the destination of China. This final rule also adds to the Entity List sixty-eight non-U.S. This document is scheduled to be published in the Federal Register on 05/21/2019 and available online at https://federalregister.gov/d/2019-10616, and on govinfo.gov 2 affiliates of Huawei located in twenty-six destinations: Belgium, Bolivia, Brazil, Burma, Canada, Chile, China, Egypt, Germany, Hong Kong, Jamaica, Japan, Jordan, Lebanon, Madagascar, Netherlands, Oman, Pakistan, Paraguay, Qatar, Singapore, Sri Lanka, Switzerland, Taiwan, United Kingdom, and Vietnam.

而由于美国的长臂管辖权,不仅仅美国公司,使用了来自美国公司技术的其他国家公司都受到影响。到今天(2019.05.23)为止,已经有如下公司宣布中止与华为的业务往来

  • Qualcomm
  • Broadcom
  • Xilinx
  • Google
  • Intel
  • Microsoft (Microsoft Store 移除华为Matebook)
  • Arm

可以预见,后面还会有更多的公司加入这个队伍中。甚至不排除因为政治因素,美国的仆从国/地区的企业也加入制裁的队列,比如三星、台积电等。

虽然华为宣布了自己的备胎计划,但是我不认为他有能力在所有的领域找到美国合适的供应商。在全球化的今天,我们不能指望一家商业公司能够抗住地球老大的全力制裁。所以,如果没有快速改善,华为肯定会受到极大的冲击,运营商和消费者都会对它的持续运营能力表示质疑。

另外,据说大疆和海康威视也可能进入“实体清单”。

2 大趋势 - 科技全球化转向

华为可能会死,可能会活。谁也不知道他们的勉力求存是否能成功,只能祝福他们。

但是,科技行业的全球化是直接受到了冲击。

长久以来,科技行业完成了全球分工,美帝核心科技不是吹的。整体基础研究实力,核心技术能力,都是一点一滴积攒起来的。然后下游公司再进行进一步的开发和业务层的使用。所有行业不是一个国家可以吃完的,

而其中一个默认的规则,就是大家都信任这是一个商业社会,分分合合之间,都是市场在选择。昨日合作伙伴,今日是对手,明天又把酒言欢,都是非常可能发生的事情。同是中国的通信巨头,华为和中兴在海外打出猪脑子。同是美国公司,苹果和高通、谷歌纠纷不断。有诉讼,有行政力量的反垄断,但是都是在商业规则之下进行。

以前海外市场一直担心,科技企业会被中国政府控制,在行政指令下做出违背所在国利益的事情。现在靴子落地,谁也没想到第一个出手的是人类希望、全球标杆与道德旗手,浓眉大眼的美利坚政府亲自下场,国内企业应者云集,全球第一的电信供应商被整得灰头土脸,狼狈不堪。

短期效应:
硅谷受到极大影响,华为每年采购要花600多亿美金,其中 110 亿美金来自美国供应商。华为 90 多家核心供应商,有 33 家美国供应商。失去华为这个客户,这些公司的营收会受到极大冲击。

中期效应
中期来看,华为在消费级的终端业务可替代性极强。只是(意向)消费者从最优选择变为了次优选择,消费者遭到一定的损失。但是华为消失后的空缺很大可能被欧洲或者韩国厂商拿到,也有可能被中国其他厂商拿到。但是他们对技术和原材料的需求不会变,所以中期来看,美国供应商并不会遭到特别大的损失。

长期效应
美国政府动用行政指令打压华为,明眼人都看得出来这是怎么回事。盟友可能还会继续买买买,但是也会留个心眼;中立国家乃至(少有的)敌对国家,估计心里已经很慌了。整个产业链会做很多重复研发的事情。

同时,美帝失去了占据很久的道德高地。一巴掌一巴掌的扇在支持自由市场的人的脸上。“造不如买” 的言论这些应该会慢慢消失,整体社会态度会更趋于保守。

政府会动用行政力量来进行扶持,企业也会考虑被制裁怎么办。总体来讲对国内科技产业的培育是个好的机会。以前很多产品,可能性能只有美国产品的 80% ,即使价格是 50%,综合来看用起来还是不划算,很可能丢掉市场。但现在是在 80% 和可能的 0% 之间选择,就容易很多了。

从国际贸易的角度来看,我国的科技企业可能会遇到更多的困难,客户会考虑万一发生同样的制裁,他们怎么办。这个问题很难回答。

Written with StackEdit.

eSIM前置知识 - 00. PKI与证书

0. 前言

最近开始认真的看GSMA eSIM规范,里面毫无疑问复用了极多已有的成熟技术。其中,最基础的就是利用PKI体系以及证书体系,来证明“我就是我”这个根本问题。

同时,eSIM里面涉及到了运营商核心数据怎么样才能通过第三方,安全的下载到eSIM里面去。运营商默认所有的第三方都是不可靠的,所以里面就涉及到各种加密解密。这也是为什么要提前介绍各种算法以及算法本身的作用。

1. 对称算法

1.1 定义

对称加密算法,就是加密方和解密方拥有同样的密钥。使用这组密钥来对敏感信息进行加密和解密。

1.2 优缺点

  • 优点:加密速度快
  • 缺点1:加密的安全性取决于密钥,而传输和保管密钥的过程中极容易遭到攻击导致密钥暴露。
  • 缺点2:密钥管理复杂。如果有 n 个参与方,那么需要n x (n-1) 把密钥才能够保证两两之间的通信不会被第三方窃取。

1.3 常用对称算法

  • DES
  • 3DES
  • AES

2. 非对称算法

2.1 定义

非对称算法,加密方和解密方使用不同的密钥进行。通常称之为公私钥。一方把自己的公钥公布出去,把私钥安全保存。用公钥加密的信息只能用私钥解密,反之,用私钥加密的信息也只能用公钥解密。

2.2 优缺点

  • 优点:密钥管理简单
  • 缺点:加解密速度较慢

2.3 常用非对称算法

一般来讲,非对称算法都是基于一些数学难题。

  • RSA:基于大数的因式分解问题(IFP)
  • ECC:基于椭圆曲线的离散对数问题(ECDLP)

2.3.1 RSA进一步解释

具体的解释可以参考详解非对称加密算法RSA。这里只是简单复制其中的公私钥产生步骤

  • 首先:任取两个互不相等的大素数,m 和 n,令M = nm, N = (n−1)(m−1),假设m > n,最好取 m > 2n;否者容易被攻破;
  • 其次:取一整数e,(e, N) = 1,e < N,求得另一整数 d 满足ed = 1 (mod N),一定存在某个 d 满足 d < N;
  • 然后:两组数组数字: M,e 为公钥,可以对外公布;M,d 为私钥不可泄露。
  • 最后:不再需要m, n, N,不可以泄露,最好是直接清除。

2.3.2 ECC进一步解释

ECC是基于椭圆曲线的离散对数问题。先给个结论:我是不可能看懂的。有兴趣的请去参考ECC椭圆曲线加解密原理详解(配图)

照例,复制其中的公私钥产生步骤如下:
考虑K=kG ,其中K、G为椭圆曲线 Ep(a,b) 上的点,q 为 G 的阶(nG=O∞ ),k为小于 q 的整数。则给定 k 和 G,根据加法法则,计算 K 很容易。但反过来,给定 K 和 G,求 k 就非常困难。因为实际使用中的 ECC 原则上把 p 取得相当大,q 也相当大,要把 q 个解点逐一算出来列成表是不可能的。这就是椭圆曲线加密算法的数学依据 。

  • 点G称为基点(base point)
  • k(k<q)为私钥(private key)
  • K为公钥(public key)

我们通常使用等式y^2 = x^3 + Ax + B (mod p)来描述一条椭圆曲线,其中

  • p、A、B 确定一条椭圆曲线( p 为质数)
  • x、y确定了基点 G
  • q 为基点 G 的阶,
  • h 是椭圆曲线上所有点的个数 m 与 n 相除的商的整数部分

参考RFC 6932,举了一个参数集

   Domain Parameters for the 256-Bit Curve
   Curve-ID: brainpoolP256r1
   p = A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377
   A = 7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9
   B = 26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6
   x = 8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262
   y = 547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997
   q = A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7
   z = 3E2D4BD9597B58639AE7AA669CAB9837CF5CF20A2C852D10F655668DFC150EF0
   h = 1

在实际中,不是所有的椭圆曲线都可以用来做加密用,曲线的选择需要精心的设计。下面是根据 RFC 4492 附录 A 列出来的一些不同组织的曲线名称。其中最后三个是用得最多的。

         ------------------------------------------
                   Curve names chosen by
              different standards organizations
         ------------+---------------+-------------
         SECG        |  ANSI X9.62   |  NIST
         ------------+---------------+-------------
         sect163k1   |               |   NIST K-163
         sect163r1   |               |
         sect163r2   |               |   NIST B-163
         sect193r1   |               |
         sect193r2   |               |
         sect233k1   |               |   NIST K-233
         sect233r1   |               |   NIST B-233
         sect239k1   |               |
         sect283k1   |               |   NIST K-283
         sect283r1   |               |   NIST B-283
         sect409k1   |               |   NIST K-409
         sect409r1   |               |   NIST B-409
         sect571k1   |               |   NIST K-571
         sect571r1   |               |   NIST B-571
         secp160k1   |               |
         secp160r1   |               |
         secp160r2   |               |
         secp192k1   |               |
         secp192r1   |  prime192v1   |   NIST P-192
         secp224k1   |               |
         secp224r1   |               |   NIST P-224
         secp256k1   |               |
         secp256r1   |  prime256v1   |   NIST P-256
         secp384r1   |               |   NIST P-384
         secp521r1   |               |   NIST P-521
         ------------+---------------+-------------

  Table 6: Equivalent curves defined by SECG, ANSI, and NIST

3. 散列算法

3.1 定义

来自英文的Hash,也翻译为哈希算法或者杂凑算法。是把任意长度的内容通过散列算法转换为固定长度的一个值。

可以看出来,本质上散列算法是在把无限的内容域映射向有限值域。一定会存在同一个散列值对应几个不同输入值的情况出现。所以,一个好的散列算法,应该具有如下特征【引用自这里

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
  • 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
  • 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
  • 碰撞避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生碰撞)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

3.2 用途与安全性分析

发送方为了描述自己的信息没有被篡改,可以为每份输入产生一个散列值。只要输入有轻微变动,散列值就会完全不一样【输入敏感】。

接收方收到信息后,再通过同样的算法可以轻易算出一个散列值【正向快速】,再与发送方的散列值进行对比,就能够知道信息是否有被篡改。而由于【碰撞避免】的特性,很难篡改原来信息后能够构造出来一个相同 Hash 值。

目前所有的攻击都是在针对【碰撞避免】,而 MD5 和 SHA1 也正是由于被证明成功构造出了具有相同 Hash 值的两段输入,从而开始慢慢被业界抛弃。

3.3 常用散列算法

  • MD5
  • SHA1
  • SHA2 (SHA-224、SHA-256、SHA-384 和 SHA-512)

4. 各算法实用举例

下面举个实际的例子

前面讲了常见的加解密算法。其中非对称算法有个很棒的特性,就是私钥加密,就只有公钥能解开;反之亦然。利用非对称算法的这个特性,假设有两个人 Alice 和 Bob,他们可以满世界的分发自己的公钥,让别人用自己的公钥加密信息,然后自己再拿私钥来解密获得,不用像对称算法一样担心加密内容遭到破解。

密钥持有情况如下

Key Alice Bob
公钥 PKa, PKb PKb,PKa
私钥 SKa SKb
对称密钥 K K

Alice 准备发会议记录给Bob:“Bob,你好,我是Alice。根据我们 2019.05.16 3pm 在 3 号楼的会议,本次会议记录为 xxxxxx(省略 3000 字)”。我们把这段话称之为 Message。

4.1 加密与解密

[非对称算法使用场景]
在这里,如果 Alice 只想让 Bob 收到这段通知,她就可以用 Bob 的 PKb 加密Message,发送给 Bob,然后 Bob 用自己的私钥 SKb 解密即可。其他人即使截获到这段加密 Message,因为没有 SKb,也没有办法得到通知的内容。

[对称算法与非对称算法结合使用]
前面我们也提到过,非对称算法的效率比较低。如果加密大量数据会很慢。这种情况下,完全可以用PKb加密一把对称密钥K,然后把加密后的K发送给 Bob,Bob使用SKb解密得到K。然后 Alice 再用K来加密 Message。这样效率和安全都得到了保证。

4.2 签名与验签

但是,因为 Bob 把自己的公钥 PKb 到处都有分发,这把密钥很有可能被其他人得到。那么,Bob 怎么确认这段会议记录确实是 Alice 发的呢?也有可能是 Mallory 写了这么一段会议记录,假装 Alice 发了出来。

所以,Alice 需要对这段话进行签名。

简单的做法,就是 Alice 直接把所有消息用自己的私钥 SKa 加密,自然只有拥有 PKa 的人才能解开,从而确认这个 Message 是 SKa 拥有者发出来的。

[散列算法使用场景]
但是一般我们不会这样子用。我们一般的做法,是对这段 Message 做一个散列运算,得到一个消息摘要 MD1(Message Digest)。再用 SKa 对这段 MD1 进行加密,得到了一个签名。

到了这一步,Alice 就可以把 明文或者密文的 Message 与签名一起发送给 Bob。

Bob 收到后,解密得到明文 Message,通过同样的算法算出一个特征值MD2。用 PKa 解密签名得到 MD1,比对 MD1 与 MD2 是否一致,就能够确认消息是否遭到篡改。

4.3 中间人攻击 MITM

在实际使用中,Alice 和 Bob 基本上不可能面对面,大概率是通过网络进行沟通。所以,这里就遇到了一个攻击方式,称之为“中间人攻击”,Man In The Middle。

前面讲到了 Alice 和 Bob可以满世界的分发自己的公钥。问题来了,如果有个攻击者 Mallory,在 Alice 和 Bob 交换 PK 的时候,截下了这个他们的 PK,用自己的PKm代替。从而我们得到如下的密钥持有情况

Key Alice Mallory Bob
公钥 PKa, PKm PKa, PKb, PKm PKb,PKm
私钥 SKa SKm SKb

Alice 和 Bob 以为自己持有的公钥是对方的,后面不管 Alice 和 Bob 怎么通信,只要Mallory能够截下,他就可以先解密,然后用自己的密钥代替,从而完成中间人攻击。

成功进行中间人攻击后,可以默默的记下 Alice 和 Bob 交互的所有数据,进行消息窃取。在有价值的时候,甚至可以篡改消息,从而得到更大的收益。

要防范这个攻击,我们就需要用到“证书”这个概念。具体内容,下一篇再来仔细的讲。

Written with StackEdit.

【转载】六国论

六国论 [宋]苏洵

六国破灭,非兵不利 ,战不善,弊在赂秦。赂秦而力亏,破灭之道也。或曰:六国互丧,率赂秦耶?曰:不赂者以赂者丧,盖失强援,不能独完。故曰:弊在赂秦也。

秦以攻取之外,小则获邑,大则得城。较秦之所得,与战胜而得者,其实百倍;诸侯之所亡,与战败而亡者,其实亦百倍。则秦之所大欲,诸侯之所大患,固不在战矣。思厥先祖父,暴霜露,斩荆棘,以有尺寸之地。子孙视之不甚惜,举以予人,如弃草芥。今日割五城,明日割十城,然后得一夕安寝。起视四境,而秦兵又至矣。然则诸侯之地有限,暴秦之欲无厌,奉之弥繁,侵之愈急。故不战而强弱胜负已判矣。至于颠覆,理固宜然。古人云:“以地事秦,犹抱薪救火,薪不尽,火不灭。”此言得之。

齐人未尝赂秦,终继五国迁灭,何哉?与嬴而不助五国也。五国既丧,齐亦不免矣。燕赵之君,始有远略,能守其土,义不赂秦。是故燕虽小国而后亡,斯用兵之效也。至丹以荆卿为计,始速祸焉。赵尝五战于秦,二败而三胜。后秦击赵者再,李牧连却之。洎牧以谗诛,邯郸为郡,惜其用武而不终也。且燕赵处秦革灭殆尽之际,可谓智力孤危,战败而亡,诚不得已。向使三国各爱其地,齐人勿附于秦,刺客不行,良将犹在,则胜负之数,存亡之理,当与秦相较,或未易量。

呜呼!以赂秦之地,封天下之谋臣,以事秦之心,礼天下之奇才,并力西向,则吾恐秦人食之不得下咽也。悲夫!有如此之势,而为秦人积威之所劫,日削月割,以趋于亡。为国者无使为积威之所劫哉!

夫六国与秦皆诸侯,其势弱于秦,而犹有可以不赂而胜之之势。苟以天下之大,而从六国破亡之故事,是又在六国下矣。

Written with StackEdit.