HTTPS(二):HTTPS原理-內(nèi)容加密

HTTPS是如何做到『內(nèi)容加密』骂倘、『身份認(rèn)證』、『內(nèi)容完整性』的?

下面從原理角度看一下

HTTPS 原理介紹之內(nèi)容加密

一纽匙、加密算法簡介

1> 加密算法一般分為兩種: '對稱加密' 和 '非對稱加密'。
2> '對稱加密': 也叫'密鑰加密'拍谐,就是指加密和解密使用的是相同的密鑰烛缔。
3> '非對稱加密': 也叫'公鑰加密',就是指加密和解密使用的是不同的密鑰轩拨。
對稱加密.png
非對稱加密.png

對稱加密特點

1> 對稱加密強度非常高践瓷,一般破解不了。
2> 但存在一個很大的問題就是'無法安全地生成和保管密鑰'亡蓉。
3> 假如客戶端和服務(wù)器之間每次會話都使用固定的晕翠、相同的密鑰加密和解密,肯定存在很大的安全隱患砍濒。
4> 如果有人從客戶端獲取到了對稱密鑰崖面,整個內(nèi)容就不存在安全性了元咙,而且管理海量的客戶端密鑰也是一件很復(fù)雜的事情。

非對稱加密特點

1> 非對稱加密主要用于密鑰交換(也叫密鑰協(xié)商)巫员,能夠很好地解決這個問題庶香。
2> 客戶端和服務(wù)器每次新建會話時都使用非對稱密鑰交換算法協(xié)商出對稱密鑰,使用這些對稱密鑰完成應(yīng)用數(shù)據(jù)的加解密和驗證简识,整個會話過程中的密鑰只在內(nèi)存中生成和保存赶掖,而且每個會話的對稱密鑰都不相同(除非會話復(fù)用),中間者無法竊取七扰。
3> 非對稱密鑰交換很安全奢赂,但同時也是 HTTPS 性能和速度嚴(yán)重降低的“罪魁禍?zhǔn)住薄O胍?HTTPS 為什么影響速度颈走,為什么消耗資源膳灶,就一定要理解非對稱密鑰交換的整個過程。

下面重點介紹一下非對稱密鑰交換的數(shù)學(xué)原理以及在 TLS 握手過程中的應(yīng)用立由。

二轧钓、 非對稱密鑰交換

簡介
1> 在非對稱密鑰交換算法出現(xiàn)以前,對稱加密一個很大的問題就是不知道如何安全生成和保管密鑰锐膜。
2> 非對稱密鑰交換過程主要就是為了解決這個問題毕箍,使得對稱密鑰的生成和使用更加安全。
3> 密鑰交換算法本身非常復(fù)雜道盏,密鑰交換過程涉及到隨機(jī)數(shù)生成而柑,模指數(shù)運算,空白補齊荷逞,加密媒咳,簽名等操作。

常見的密鑰交換算法有: RSA种远、ECDHE筏养、DH、DHE等算法,它們的特性如下:

RSA
1> 算法實現(xiàn)簡單弛槐,誕生與1977年速警,歷史悠久长豁,經(jīng)過了長時間的破解測試该园,安全性高弱匪。
2> 缺點就是需要比較大的素數(shù)(目前常用的是2048位)來保證安全強度,很消耗CPU運算資源。
3> RSA是目前'唯一一個'既能用于'密鑰交換'又能用于'證書簽名'的算法。
DH
Diffie-Hellman 密鑰交換算法,誕生事件比較早(1977年),但是1999年才公開先改,缺點是比較消耗CPU性能载碌。
Diffie-Hellman 表示的是兩位美國計算機(jī)學(xué)家: Whitfield Diffie 和 Martin Hellman步咪。
ECDHE
1> 使用橢圓曲線(ECC)的DH算法。
2> 優(yōu)點: 能用較小的素數(shù)(256位)實現(xiàn)RSA相同的安全等級。
3> 缺點: 算法實現(xiàn)復(fù)雜闰挡,用于密鑰交換的歷史不長夺脾,沒有經(jīng)過長時間的安全攻擊測試乙墙。
ECDH
不支持PFS腥刹,安全性低,同時無法實現(xiàn) false start
'PFS'(perfect forward secrecy)汉买,中文可叫做'完全前向保密'衔峰。
1> 要求一個密鑰只能訪問由它所保護(hù)的數(shù)據(jù);
2> 用來產(chǎn)生密鑰的元素一次一換蛙粘,不能再產(chǎn)生其它的密鑰垫卤;
3> 一個密鑰被破解,并不影響其他密鑰的安全性出牧。
TLS False Start 的功能
用來對 HTTPS 網(wǎng)站進(jìn)行加速的穴肘,它是通過 '減少' 客戶端和服務(wù)器之間的'通信往返RT(Round Trip)'來實現(xiàn)的。
DHE
不支持ECC舔痕。非常消耗CPU資源评抚。

建議優(yōu)先支持 RSA 和 ECDHE_RSA 密鑰交換算法。原因如下:

1> ECDHE 支持 ECC 加速伯复,計算速度更快慨代。支持 PFS,更加安全啸如。支持 false start侍匙,用戶訪問速度更快。
2> 目前還有至少 20% 以上的客戶端不支持 ECDHE叮雳,我們推薦使用 RSA 而不是 DH 或者 DHE想暗,因為 DH 系列算法非常消耗 CPU(相當(dāng)于要做兩次 RSA 計算)。
查看ECDHE_RSA用在哪里.png

需要注意:
通常所說的 ECDHE 密鑰交換默認(rèn)都是指 ECDHE_RSA债鸡,使用 ECDHE 生成 DH 算法所需的公私鑰江滨,然后使用 RSA 算法進(jìn)行簽名铛纬,最后再計算得出對稱密鑰厌均。

非對稱加密相比對稱加密更加安全,但也存在兩個明顯缺點
1> CPU 計算資源消耗非常大告唆。一次完全 TLS 握手棺弊,密鑰交換時的非對稱解密計算量占整個握手過程的 90% 以上。而對稱加密的計算量只相當(dāng)于非對稱加密的 0.1%擒悬,如果應(yīng)用層數(shù)據(jù)也使用非對稱加解密模她,性能開銷太大,無法承受懂牧。
2> 非對稱加密算法對加密內(nèi)容的長度有限制侈净,不能超過公鑰長度尊勿。比如現(xiàn)在常用的公鑰長度是 2048 位,意味著待加密內(nèi)容不能超過 256 個字節(jié)畜侦。
3> 所以公鑰加密目前只能用來作'密鑰交換'或者'內(nèi)容簽名'元扔。
4> '不適合用來做應(yīng)用層傳輸內(nèi)容的加解密'。
5> 非對稱密鑰交換算法是整個 HTTPS 得以安全的基石旋膳,充分理解非對稱密鑰交換算法是理解 HTTPS 協(xié)議和功能的關(guān)鍵澎语。
2.1 RSA 密鑰協(xié)商
2.1.1 RSA 算法介紹
1. RSA 算法的安全性是建立在乘法不可逆或者大數(shù)因子很難分解的基礎(chǔ)上。
2. RSA 的推導(dǎo)和實現(xiàn)涉及到了'歐拉函數(shù)'和'費馬定理'及'模反元素'的概念验懊,有興趣可以自行百度擅羞。
3. RSA 算法是'統(tǒng)治世界'的最重要算法之一,而且從目前來看义图,RSA 也是 'HTTPS 體系中最重要的算法'减俏,沒有之一。
數(shù)學(xué)知識
1. 互質(zhì)關(guān)系
  1> 如果兩個正整數(shù)歌溉,除了1之外垄懂,沒有其它公因子,我們就稱這兩個數(shù)是'互質(zhì)關(guān)系'痛垛。
  2> 比如: 11 和 30 沒有除1之外的公因子草慧,所以它們就是互質(zhì)關(guān)系。這也說明匙头,不是質(zhì)數(shù)也可以構(gòu)成互質(zhì)關(guān)系漫谷。
  3> 如果一個正整數(shù),它的因子除了1就是它本身蹂析,這個正整數(shù)就是'質(zhì)數(shù)'舔示。
2. 歐拉函數(shù):
  1> 任意給定一個正整數(shù) n,請問在小于等于 n 的正整數(shù)之中电抚,有多少個數(shù)與 n 構(gòu)成'互質(zhì)'關(guān)系惕稻?
  2> 計算這個值的方法就叫'歐拉函數(shù)',以 φ(n) 表示蝙叛。
  3> 例如: φ(8) 俺祠,在1到8之中,與8構(gòu)成互質(zhì)關(guān)系的是1借帘、3蜘渣、5、7肺然,所以 φ(8)  = 4.
3. 
2.2 RSA 的密鑰生成步驟如下:
1. 隨機(jī)挑選兩個不相等的質(zhì)數(shù) p 和 q蔫缸,假設(shè) p = 13, q = 19。 
   (實際應(yīng)用中际起,這兩個質(zhì)數(shù)越大拾碌,就越難破解)
2. 計算 p 和 q 的乘積 n
   1> n = p * q = 13 * 19 = 247;
   2> n 的長度就是密鑰長度吐葱。 247對應(yīng)的二進(jìn)制是 11110111,一共8位校翔,所以這個密鑰就是8位唇撬。
   3> 實際應(yīng)用中,RSA密鑰一般是1024位展融,重要場合則為2048位窖认。
3. 計算 n 的歐拉函數(shù) φ(n)。
   1> φ(n) 表示與整數(shù) n 互質(zhì)數(shù)的個數(shù)告希。如果 n 等于兩個質(zhì)數(shù)的積扑浸,則φ(n) = (p-1)(q-1) 。
   2> φ(247) = (13-1)(19-1) = 216燕偶。
4. 隨機(jī)選擇一個整數(shù)數(shù) e喝噪,滿足 1< e <φ(n) ,并且 e 與φ(n)互質(zhì)指么,假設(shè) e = 17酝惧。
   (實際應(yīng)用中,常常選擇65537)
5. 計算 e 對于 φ(n) 的模反元素d
   1> 所謂『模反元素』就是指有一個整數(shù)d伯诬,可以使得 ed 被 φ(n)除的余數(shù)為1晚唇。
   2> ed = 1 (mod φ(n)) 等價于 ed - 1 = kφ(n)
   3> 于是,找到模反元素d盗似,實質(zhì)上就是對下面這個二元一次方程求解:
     ex + φ(n)y = 1
     已知 e = 17, φ(n) = 216哩陕,則 17x + 216y = 1
     這個方程可以用『擴(kuò)展歐幾里得算法』求解,此處省略具體過程赫舒『芳埃總之,可以算出一組整數(shù)解為(x, y) = (89, -7)接癌,即 d = 89心赶。
   至此,所有計算完成缺猛。
6. 將 n 和 e 封裝成公鑰缨叫,n 和 d 封裝成私鑰。
   本例中: n = 247, e = 17, d = 89枯夜,所以公鑰就是(247, 17), 私鑰就是(247, 89)弯汰。
實際應(yīng)用中艰山,公鑰和私鑰數(shù)據(jù)都采用 ASN.1(Abstract Syntax Notation One 抽象語法標(biāo)記) 格式表達(dá)湖雹。
2.3 RSA算法的可靠性
回顧上面的密鑰生成步驟,一共出現(xiàn)了6個數(shù)字:
 p曙搬、q摔吏、n鸽嫂、φ(n)、e征讲、d
1. 這6個數(shù)字之中据某,公鑰用到了兩個(n和e),其余四個數(shù)字都是不公開的诗箍。
2. 最關(guān)鍵的是d癣籽,因為 n 和 d 組成了私鑰,一旦d泄露滤祖,就等于私鑰泄露筷狼。
有無可能在已知 n 和 e 的情況下,推導(dǎo)出 d?
1> ed ≡ 1 (mod φ(n))匠童。只有知道e和φ(n)埂材,才能算出d。
2> φ(n) = (p-1)(q-1)汤求。只有知道p和q俏险,才能算出φ(n)。
3> n = pq扬绪。只有將n因數(shù)分解竖独,才能算出p和q。
   結(jié)論: 如果 n 可以被因數(shù)分解挤牛,d就是算出预鬓,也就意味著私鑰被破解。
4> 但是當(dāng) n 大到一定程度時(比如接近 2^2048)赊颠,即使現(xiàn)在最快的 CPU 也無法進(jìn)行這個因式分解格二,即無法知道 n 是由哪個數(shù) p 和 q 乘出來的。
   大整數(shù)的因數(shù)分解竣蹦,是一件非常困難的事情顶猜。目前,除了暴力破解痘括,還沒有發(fā)現(xiàn)別的有效方法长窄。
5> 所以就算知道了公鑰,整個加解密過程還是非常安全的纲菌。

維基百科這樣寫:
"對極大整數(shù)做因數(shù)分解的難度決定了RSA算法的可靠性挠日。
   換言之,對一極大整數(shù)做因數(shù)分解愈困難翰舌,RSA算法愈可靠嚣潜。
   假如有人找到一種快速因數(shù)分解的算法,那么RSA的可靠性就會極度下降椅贱。但找到這樣的算法的可能性是非常小的懂算。
   今天只有短的RSA密鑰才可能被暴力破解只冻。到2008年為止,世界上還沒有任何可靠的攻擊RSA算法的方式计技。
  只要密鑰長度足夠長喜德,用RSA加密的信息實際上是不能被解破的。"
舉例: 你沒法對下面這個整數(shù)進(jìn)行因數(shù)分解
   12301866845301177551304949
  58384962720772853569595334
  79219732245215172640050726
  36575187452021997864693899
  56474942774063845925192557
  32630345373154826850791702
  61221429134616704292143116
  02221240479274737794080665
  351419597459856902143413
等于
   33478071698956898786044169
  84821269081770479498371376
  85689124313889828837938780
  02287614711652531743087737
  814467999489
    ×
  36746043666799590428244633
  79962795263227915816434308
  76426760322838157396665112
  79233373417143396810270092
  798736308917
事實上垮媒,這大概是人類已經(jīng)分解的最大整數(shù)(232個十進(jìn)制位舍悯,768個二進(jìn)制位)。
比它更大的因數(shù)分解睡雇,還沒有被報道過贱呐,因此目前被破解的最長RSA密鑰就是768位。
2.4 加密和解密

有了公鑰和私鑰入桂,就可以進(jìn)行加密解密了奄薇。

2.4.1 加密要用公鑰(n, e)

假設(shè)客戶端要想服務(wù)器發(fā)送加密信息 m,它就要用服務(wù)器的公鑰(n, e)對 m 進(jìn)行加密抗愁。這里需要注意馁蒂,m必須是整數(shù)(字符串可以取ASCII或Unicode值),并且 m 必須小于 n蜘腌。

所謂『加密』沫屡,就是算出下式的c:
m^e ≡ c (mod n)

客戶端的公鑰是(247, 17),m值假設(shè)是 135撮珠,那么可以算出下面的等式:

135^17 = 200(mod 247)

于是 c 等于200沮脖,客戶端就把 200 發(fā)送給了服務(wù)器。

2.4.2 解密要用私鑰(n, d)

服務(wù)器拿到客戶端發(fā)來的 200 以后芯急,就用自己的私鑰(247, 89)進(jìn)行解密勺届。可以證明娶耍,下面的等式一定成立:

c^d = m (mod n)
也就是說免姿,c的d次方除以n的余數(shù)為m,那么榕酒,c等于200胚膊,私鑰是(247, 89),那么服務(wù)器算出
200^89 = 135 (mod 247)

因此想鹰,服務(wù)器知道了客戶端加密前的原文就是 135紊婉。
至此,"加密-解密"的整個過程全部完成辑舷。


RSA加密示例.png

可以看到喻犁,如果不知道 d,就沒有辦法從c求出m。要知道d就必須分解n株汉,這是極難做到的,所以RSA算法保證了通信安全歌殃。

那么乔妈,公鑰(n, e)只能加密小于n的整數(shù),如果要加密大于n的整數(shù)氓皱,怎么辦路召?
有兩種解決方法
1> 把長信息分割成若干短信息,每段分別加密
2> 先選擇一種對稱加密算法(比如DES)波材,用這種算法的密鑰加密信息股淡,再用RSA公鑰加密DES密鑰。
1> 實際應(yīng)用中, (n, e) 組成了'公鑰對'廷区,(n, d)組成了'私鑰對'唯灵,其中 n 和 d都是一個接近2048的大數(shù)。
即使現(xiàn)在性能很強的CPU隙轻,想要計算 m≡c^d mod(n)埠帕,也需要消耗比較大的計算資源和時間。
2> 公鑰對 (n, e) 一般都注冊到了證書里玖绿,任何人都能直接查看敛瓷,比如百度證書的公鑰對如下圖,

百度HTTPS證書公鑰.png
e 取值比較小的好處有兩個:
1. 由 c = m^e mod(n) 可知斑匪,e 較小呐籽,客戶端 CPU 計算消耗的資源較少。
2. 加大 server 端的破解難度蚀瘸。e 比較小狡蝶,私鑰對中的 d 必然會非常大。所以 d 的取值空間也就非常大贮勃,增加了破解難度牢酵。

2.5 TLS握手過程中的 RSA 密鑰協(xié)商

介紹玩 RSA的原理,那最終會話所需要的對稱密鑰是如何生成的呢衙猪?跟RSA有什么關(guān)系馍乙?
以 TLS1.2為例簡單描述以下,省略跟密鑰交換無關(guān)的握手消息垫释。過程如下:

1. 客戶端發(fā)送 client_hello, 包含一個隨機(jī)數(shù) random1丝格。
2. 服務(wù)器回復(fù) server_hello,包含一個隨機(jī)數(shù) random2棵譬,同時回復(fù) certificate显蝌,攜帶了證書公鑰P。
3. 客戶端收到random2之后,就能夠生成 premaster_secrect 以及 master_secrect曼尊。
  其中酬诀,premaster_secrect 長度為48個字節(jié),前兩個字節(jié)是協(xié)議版本號骆撇,剩下的46個字節(jié)填充一個隨機(jī)數(shù)瞒御。結(jié)構(gòu)如下:
  Struct {byte Version[2]; bute random[46];} 
** master_secrect 的生成算法簡述如下
  Master_key = PRF(premaster_secrect, "master secrect", 隨機(jī)數(shù)1+隨機(jī)數(shù)2) 
  其中,PRF是一個隨機(jī)函數(shù)神郊,定義如下:
  PRF(secrect, label, seed) = P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed)
而 master secrect 包含了6部分內(nèi)容肴裙,分別是用于校驗內(nèi)容一致性的密鑰,用于對稱內(nèi)容加解密的密鑰涌乳,
以及初始化向量(用于CBC模式)蜻懦,客戶端和服務(wù)器各一份,從上式可以看出夕晓,把premaster_key 賦值給 secrect宛乃, 
master key 賦值給 label,客戶端和服務(wù)器的兩個隨機(jī)數(shù)做種子就能確定地求出一個 48位長的隨機(jī)數(shù)蒸辆。
4. 客戶端使用證書公鑰P將 premaster_secrect加密后發(fā)送給服務(wù)器烤惊。
5. 服務(wù)器使用私鑰解密得到 premaster_secrect,又由于服務(wù)端之前就接收了隨機(jī)數(shù)1吁朦,所以服務(wù)器根據(jù)相同的生成算法柒室,在相同的輸入?yún)?shù)下,求出了相同了 master secrect逗宜。
RSA密鑰協(xié)商過程.png

可以看出雄右,密鑰協(xié)商過程需要 2 個 RT(Route Trip),這也是 HTTPS 慢的一個重要原因纺讲。而 RSA 發(fā)揮的關(guān)鍵作用就是對 premaster_secrect 進(jìn)行了加密和解密擂仍。中間者不可能破解 RSA 算法,也就不可能知道 premaster_secrect熬甚,從而保證了密鑰協(xié)商過程的安全性逢渔。


三、對稱內(nèi)容加密

1> 非對稱密鑰交換過程結(jié)束之后就得出了本次會話需要使用的對稱密鑰乡括。
2> 對稱加密又分為兩種模式:流式加密和分組加密肃廓。
3> 流式加密現(xiàn)在常用的就是 RC4,不過 RC4 已經(jīng)不再安全诲泌,微軟也建議網(wǎng)站盡量不要使用 RC4 流式加密盲赊。
4> 一種新的替代 RC4 的流式加密算法叫 ChaCha20,它是 google 推出的速度更快敷扫,更安全的加密算法哀蘑。
   目前已經(jīng)被 android 和 chrome 采用,也編譯進(jìn)了 google 的開源 openssl 分支 —boring ssl,并且nginx 1.7.4 也支持編譯 boringssl绘迁。

5> 分組加密以前常用的模式是 AES-CBC合溺,但是 CBC 已經(jīng)被證明容易遭受BEAST和LUCKY13 攻擊。
   目前建議使用的分組加密模式是 AES-GCM缀台,不過它的缺點是計算量大棠赛,性能和電量消耗都比較高,不適用于移動電話和平板電腦将硝。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恭朗,一起剝皮案震驚了整個濱河市屏镊,隨后出現(xiàn)的幾起案子依疼,更是在濱河造成了極大的恐慌,老刑警劉巖而芥,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件律罢,死亡現(xiàn)場離奇詭異,居然都是意外死亡棍丐,警方通過查閱死者的電腦和手機(jī)误辑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歌逢,“玉大人巾钉,你說我怎么就攤上這事∶匕福” “怎么了妄痪?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵凯沪,是天一觀的道長。 經(jīng)常有香客問我,道長派殷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任敲长,我火速辦了婚禮梨与,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘未舟。我一直安慰自己圈暗,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布裕膀。 她就那樣靜靜地躺著厂置,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魂角。 梳的紋絲不亂的頭發(fā)上昵济,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼访忿。 笑死瞧栗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的海铆。 我是一名探鬼主播迹恐,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卧斟!你這毒婦竟也來了殴边?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤珍语,失蹤者是張志新(化名)和其女友劉穎锤岸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體板乙,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡是偷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了募逞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛋铆。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖放接,靈堂內(nèi)的尸體忽然破棺而出刺啦,到底是詐尸還是另有隱情,我是刑警寧澤纠脾,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布玛瘸,位于F島的核電站,受9級特大地震影響乳乌,放射性物質(zhì)發(fā)生泄漏捧韵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一汉操、第九天 我趴在偏房一處隱蔽的房頂上張望再来。 院中可真熱鬧,春花似錦磷瘤、人聲如沸芒篷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽针炉。三九已至,卻和暖如春扳抽,著一層夾襖步出監(jiān)牢的瞬間篡帕,已是汗流浹背殖侵。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留镰烧,地道東北人拢军。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像怔鳖,于是被迫代替她去往敵國和親茉唉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容