編者按:本文來自萬向區塊鏈,Odaily星球日報經授權轉載。本文為萬向區塊鏈蜂巢學院線上公開課第二十九期的分享內容。本期邀請了安比實驗室創始人郭宇,帶來分享《當深度神經網絡遇上零知識證明》。
今天跟大家一起交流下「當深度神經網絡遇上零知識證明」。零知識證明
「零知識證明」這個概念在區塊鏈底層技術架構里并不陌生,它是在1985年時由Goldwasser、Micali和Rackoff三人提出。雖然長期以來「零知識證明」只是局限在計算理論研究里的一個小領域,但是它帶來的影響非常深遠。零知識證明里面有個詞「證明」,這個概念在整個人類文明發展歷史中經過了很多次范式轉換。在古希臘,「證明」是一種巧妙的數學技巧;到20世紀初,數學證明在第三次數學危機中被重新詮釋,引入形式邏輯被形式化,因而從此誕生了計算理論與計算機。到70年代,程序和證明之間的奇妙關聯被發現,現代函數式編程與自動定理證明的很多概念被引入;到80年代,「證明」的概念被延伸到了交互系統。到了80年代之后交互式證明系統無論是從哲學意義上,還是從理論技術方面,都帶來了革命性的新的見解。在我第一次看到零知識證明概念的時候,第一反應是這個東西非常反直覺。為什么「反直覺」?我先來簡單介紹一下零知識證明基本的框架。
在零知識證明中一定有像右邊這樣一個人,我們把他稱之為Bob,左邊可能是一臺不受信任的機器。此時,假如說Bob有一個計算任務要交給左邊的機器來運行,但這機器本身可能會受人控制。Bob需要把一個「F」函數作為計算任務,帶上輸入「X」,交給左邊機器,讓它去完成這個計算任務。因為這個計算過程發生在左邊的機器上,對于Bob來說并沒有見證整個計算過程,那Bob憑什么相信計算結果Y=F的式子能成立呢。并且運算過程中摻入了一些只有左邊機器知道的秘密數據,而Bob并沒有W,因而Bob是不能通過復現計算過程來獲知計算結果是否正確。在這樣的情況下,能不能讓Bob還能相信計算結果是對的呢?一句話,零知識證明能夠神奇地讓Bob相信計算結果是正確的。這聽上去有點不可思議,信任計算結果Y是基于對左邊機器的不信任,也就是說零知識證明它憑空地產生了一些信任,這正是反直覺所在。設想一下,在兩個人互相完全不信任的情況下,居然可以通過某種東西建立信任,這點是非常非常有趣的。反直覺的零知識證明我總結一下,它可以這么來理解:可以保證一個遠程計算過程的完整性與機密性。1、完整性。雖然我沒有看見在遠程發生的計算過程,雖然沒有見證它的過程,但知道這計算過程一定是真實發生過的,而且計算結果是正確的,也就說計算過程并沒有被惡意的修改或者是被偽造。2、機密性。雖然我見證不了計算過程,同時不可能知道計算過程中的一些中間結果,也不可能知道它內部的一些信息,所以說整個計算過程,包括一些秘密輸入,對我來說是機密的、保密的。這就是反直覺零知識證明所能達到的效果。零知識證明到底有什么用處呢?我覺得最直接的用處就是所謂的「數據隱私保護」。我簡單列了一些,例如個人數據:健康數據、銀行流水、出行安排、通信記錄。其實我們是不想讓任何人知道我們的健康狀況,包括心跳、醫療記錄,也不想讓人知道每天花了多少錢。但是我們又想享受第三方的服務,比如說出門打車,想讓有些人知道自己在哪,但又不想讓其他人知道,或者說只想讓他知道一個大概的地方,不想讓他知道具體的位置。企業數據:人事檔案、倉儲物流、財務賬本、客戶信息,傳統意義上這些都是非常機密的數據,但是為了能夠最大發揮企業間協作的效果,必須要共享一部分數據。零知識證明提供了一種既能夠保證數據的隱私,同時還能共享數據的方式,所以說它對我們未來生活、工作的最大影響就是能夠提供非常有效的數據隱私保護技術。零知識證明在區塊鏈底層技術中還有很多有趣的用處,自從1985年零知識證明被提出來之后,它長期停留在理論結果層面,直到區塊鏈技術得到大規模應用之后,大概自2015年-2020年,零知識證明在區塊鏈上得到了廣泛的應用。包括區塊壓縮、保護交易匿名性、身份隱私、共享數據、鏈下數據存儲完整性等等之類,在區塊鏈行業的技術朋友們應該對這些都不太陌生。接下來介紹兩個很基本的概念。非交互式的零知識證明我們前面講過,零知識證明提出來的時候對「證明」的范式做了全新的革新,以前證明是寫在紙上,比如說老師出了一道題考試,要證明它,要把證明過程寫出來。而零知識證明是一種交互式證明,通過和老師對話,可以在不告訴老師任何證明過程的情況下讓老師相信我。為什么又有了非交互式零知識證明呢?非交互式零知識證明是用一些特殊的技巧,能夠把交互式的證明過程折疊成非交互式的零知識證明。非交互零知識證明在區塊鏈領域的應用更加廣泛。zkSNARK這也是一個很常見的詞,當然它在學術領域也有很多不那么一致的解釋。不嚴謹的說,zkSNARK是一種特殊的NIZK,即特殊的非交互式零知識證明,特殊在哪呢?下面列了三點:1、簡潔。它生成的證明非常小,有多小呢?通常是KB量級,甚至可以小到200個字節以內。別看只有這幾百個字節,但它能代表的計算過程可以非常非常龐大,它所能保護的數據也可以是上TB量級的。2、Argument。是零知識證明的一種,稍后會簡單解釋下。3、zkSNARK最后有一個「K」,就是Knowledge的意思。含義是證明是關于「knowledge」的證明,這個「knowledge」是有一個數學定義。隱私保護、區塊鏈與零知識證明
價值4800萬美元的第一輛比特幣汽車將被拍賣:金色財經報道,Bitcoin Magazine首席執行官David Bailey在價值4800萬美元的普銳斯汽車上簽署了他的名字。這輛價值4800萬美元的普銳斯被稱為第一輛比特幣汽車,目前正在Scarce.City網站上拍賣,競價將在本周六晚上11點結束。[2023/5/20 15:15:01]
講這個概念之前先要講一個非常重要的密碼學概念——承諾。如圖,大家可以看到左邊是一個數據庫,這個數據庫非常非常大,可能是超過1TB那么大,可以用密碼學的手段把它變成很小很小的一段字節,大概小于100字節。不管這個數據庫多大,最后承諾都可以壓成不超過100字節這么大的數據。別看只有100多個字節,它可以和數據庫建立唯一的綁定關系,如果當數據庫里發生任何的改變,這個承諾就必須跟著一起改變。承諾就好比是「一把鎖」,只要有人把承諾記下來之后,數據庫只要有任何的修改,承諾就會發生巨大的變化。承諾有兩個性質:性質一:Binding,一個承諾綁定一個原始數據集。這個數據集可能非常大,但可以用一個非常小的承諾給綁定起來。性質二:Hiding,承諾不會泄露原始數據的信息。因為只有100個字節左右,所以沒有泄露任何的原始數據信息,因為信息量已經被大量的損耗了。假如有很多數據庫,比如說出行記錄、銀行各有一個數據庫,可以生成兩個承諾,然后把承諾上鏈,當把承諾放在區塊鏈上之后就會有一個效果,就是再也不能反悔去修改數據庫了,但把承諾上鏈之后可以給大家看,大家可以通過承諾訪問數據庫,當然是有選擇性的開放,或者把數據庫的數據做一些處理之后開放。但因為有這個承諾被鎖定在鏈上,所以說不可能作弊。把數據交給另外一個人之前可以做很復雜的處理,可以把里面的敏感數據刪掉,這么做一定是非常誠實,并沒有造假的,因為承諾在鏈上。承諾聽上去也挺神奇,卻是很傳統很常用,但是非專業人士了解很少的的密碼學工具。承諾其實有很多種實現方法,最簡單的是可以用一些像Hash運算。還有MerkleTree、PedersenCommitment或者是PolynomialCommitment、ElgamalEncryption,這些都是能實現承諾。承諾中有兩類很關鍵,這是從密碼學理論的角度來分析:第一類:ComputationalBindingandPerfectHiding。第二類:PerfectBindingandComputationalHiding。所謂的PerfectHiding就是承諾絕對不可能泄露一絲一毫,完美的隱藏了原始數據,但它的綁定關系是Computational,如果想象未來100年后有人擁有超級量子計算機,它遠超現在的計算能力,那時候就可以造假,偽造一個和原數據不關聯的假承諾。另外一類是反過來的,它的綁定關系是PerfectBinding,有超級量子計算機也不可能去造假,但是它的Hiding是Computational,也就說如果100年以后有超級量子計算機出來之后可以破解現在產生承諾,并能夠從中間提取出來一些有用的信息。已有理論證明,在Binding和Hiding都很完美的承諾方案是不可能存在的。但是在用來做隱私保護的零知識證明方面,我們通常用第一類承諾,也就它是PerfectHiding,但承諾是ComputationalBinding。因為我們要把承諾上鏈,上鏈就意味著100年以后它仍然還被所有人看得見,但不用擔心100年以后這個信息真的能被別人破解。另外,這一類的承諾可以產生非常簡潔的零知識證明,這就是前面我提到的Argument。zkSNARK原理
監管機構關閉側重加密貨幣業務的Signature Bank避免危機擴散:金色財經報道,紐約州金融監管機構周日關閉Signature Bank,以防止硅谷銀行倒閉引發的危機波及其他銀行。美國財政部、美聯儲和聯邦保險存款公司周日發表聯合聲明指出,這家總部位于紐約的銀行的儲戶將可以提取所有資金,這與允許硅谷銀行的儲戶可在周一提取存款的情況相同,都屬于類似系統性風險的例外情況。
一位熟悉該公司運營的人士表示,將Signature置于破產管理程序的決定令其管理層感到意外,他們是在上述聲明發布前不久才得知此事。該銀行上周五面臨大量存款外流,到了周日,情況已經穩定下來。[2023/3/13 12:59:41]
憑什么能夠做到用100個字節去承諾一個數據庫,同時還能去證明這些數據滿足一定的性質,這聽上去挺不可思議的。
首先再回顧下什么叫「零知識證明」?就是右邊Bob說要做一個計算,把計算給遠程一臺不太相信的機器,這個機器可能已經被黑客控制了或者這個人可能會搗亂,但沒關系,把函數給它,輸入X,過一會交給我一個Y。雖然不相信那臺機器,但因為看見Y了,雖然對Y也是有懷疑的,但因為檢查了附加的零知識證明,零知識證明告訴我這個Y是真的,我就相信了。這個怎么做到的呢?先回到一個最樸素的想法,如果有臺機器去跑我的程序,我看不見肯定不放心,那最簡單的做法就是拿一個攝像機從頭到尾把整個計算過程給錄制下來,拿到視頻之后可以一幀一幀的去檢驗,是不是計算的每一步都是正確的。這個很傻,但理論上也許可行。但顯然方案非常不實用,因為機器在跑的時候,機器的內存狀態非常大,比方說4G內存,把整個過程錄下來視頻文件會超級大,以至于無法驗證。有沒有辦法改進呢?我們采用計算電路的計算模型,而不是CPU加內存的模型。算術電路計算模型和計算機CPU跑程序的表達能力是大致相當的,基本上常見的計算都可以表達。算術電路由一些互相連接的「門」組成,有「乘法門」與「加法門」。輸入從電路的左邊輸入,運算完右邊的輸出線上產生運行結果,整個過程就是在算「+」、「×」,不要小看這兩種運算,它們能表達絕大多數運算。算術電路的好處是它的計算過程是可以拍照的。這個時候只要相機按快門拍一下,把電路的全景拍下來,就相當于記錄了所有的計算過程。這樣一來,驗證計算就不再是驗證視頻,視頻是一幀一幀看的,但是照片就一張照片,只要驗證照片的每個細節就可以。怎么驗證電路計算呢?要驗證每一個門的運算,對于每一個加法門,驗證左輸入和右輸入加起來等不等于輸出。對于乘法門,驗證左輸入和右輸入乘起來等不等于輸出。只要耐心地挨個檢查每一個門,肯定就沒問題。如果有上百億個門,可能驗證要花不止一年的時間。有沒有一種辦法把這么多門的驗證過程變的簡單?用「多項式編碼」這個數學工具可以做到這一點。比如說有一些數:y0、y1、y2,我們把他們放到一個XY軸平面上,變成一個個的點,然后找到一根曲線恰好通過那些點,相當于用一根曲線編碼了所有的數值,從y0到yn。編碼成曲線有什么好處呢?好處是如果我想改其中某一個值yk,哪怕只要改動一點點,整條曲線就會發生明顯的擾動。擾動后的曲線和原曲線只在n個點處相同,而其它的點都產生了偏離。多項式編碼之后能放大任何一個哪怕微小的修改。于是我們可以通過隨機驗證一個點,就能檢查曲線編碼的點有沒有被修改過。接下來可以對剛才算術電路中所有乘法門的左輸入門、右輸入門、輸出門做三個不同的多項式編碼,形成三根曲線。現在只要有三根曲線,驗證這三根曲線之間滿足乘法關系就夠了。驗證乘法關系只需要隨機抽樣X軸上的一個點均可,不需要再驗證一百億個門。雖然驗證了這三根曲線,但顯然驗證者看到了太多的秘密,零知識證明要保證計算過程的秘密不被泄漏。怎么做?可以把多項式運算同態映射到橢圓曲線群上。整數有限域的加法運算會映射到橢圓曲線群上的二元運算。整數乘法運算可以同態映射到橢圓曲線群上的雙線性配對操作,乘法只能是單乘法,但足可以驗證算術電路的運算關系。這個過程看似簡單,但zkSNARK的研究是基于許許多多的密碼學家的苦苦探索,路線可以追溯到IKO07,2010年Groth有了初步想法,重點的突破是2013年,而Groth16的改進方案是現在業界最流行的零知識證明算法。還有一些非常新改進方案如:Marlin、Aurora、Spartan、Fractal,都是由GGPR13算法不斷改進一路發展過來的。2013年的GGPR13論文是比較大的突破,許多美妙的想法都來源于它。論文的四位作者是RosarioGennaro、CraigGentry、BryanParno、MarianaRaylova。
Voyager:97%的客戶投票支持其破產重組計劃:金色財經報道,據官方推特,加密貸款機構Voyager表示,Voyager客戶對公司破產重組的投票已經結束并最終確定,在參與的人中,97%的客戶(占索賠總數的98%)投了贊成票。更多信息將在周四聽證會后公布。
此前報道,美國聯邦貿易委員會(FTC)反對Voyager Digital第三次破產重組計劃,稱這將非法地防止該公司因“實際欺詐、故意不當行為或重大過失”而被追究責任。破產法官Michael Wiles于1月13日有條件地批準Voyager的重組計劃,并定于3月2日在曼哈頓舉行聽證會確認該計劃。Voyager Digital于去年7月6日根據破產法第11章申請破產保護,該公司在8月、10月和12月分別提交了第一份、第二份和第三份重組計劃。[2023/3/1 12:35:39]
看一下GGPR13/Pinocchio/Groth16框架。當我們想表達任何計算的時候,先用高級語言編寫代碼,然后通過compiler編譯成算術電路,再通過矩陣表示產生R1CS矩陣,并通過多項式編碼產生QAP,最后通過Trusted-Setup產生:ProvingKey、VerifyingKey。用ProvingKey可以證明計算過程,而通過VerifyingKey就可以知道證明π是對的。零知識證明+深度神經網絡
有了零知識證明之后我們可以為數據庫計算承諾并發布到鏈上,通過Commitment把數據庫放到鏈上后可以做很多很多事情,可以利用數據庫產生大量有用的信息,在不暴露個人隱私的情況下能夠將信息共享給朋友、企業以及全社會。接下來介紹一下我們團隊在深度網絡方面做的階段性成果。圖像識別用處很廣,這是一個標準的圖像設別的模型,標準的測試用例里有飛機、汽車、鳥、狗等,分辨率是224×224。接下來要做隱私保護+機器學習。
左邊有個數據庫,數據庫里面有很多隱私信息,經過機器學習后產生人工智能模型。Alice不希望暴露模型,畢竟模型里能反映出個人隱私。但Alice覺得模型又可以給Bob提供有價值的信息,Bob就會提供一張圖片交給Alice說你來幫我識別一下圖片,但是我又不知道你的訓練集的細節。Alice就可以拿著圖片放到模型里進行識別并產生結果,同時還附帶了零知識證明。如果模型產生的結果是識別出了一只貓,但是我還告訴你零知識證明,證明這個結果確實是通過某個秘密模型識別出來的,當然貓狗不需要證明也能看出來,但對于有些機器學習場景是沒有辦法確定預測結果是否可信的。比如醫療診斷拍一張片子有沒有癌癥的早期跡象,這個結果沒有辦法通過看片子看出來,但模型可以告訴你是非常健康的。你不相信沒關系,零知識證明可以告訴你這確實是通過非常可靠的X光片數據庫推斷出來的結果。模型可以承諾上鏈,使得Alice絕對不可能欺騙Bob,關鍵的是你不再需要信任Alice這個人是好人還是壞人,如果能產生證明結果就是對的,只關心結果,不關心誰提供。接下來做了圖像識別的實驗,是VGG16的神經網絡模型。它是一個16層的深度神經網絡。有大量的參數,14個卷積層、2個全連接層、Relu激活函數、Max-pooling池化。
Looking Glass Labs Ltd.以315萬美元收購Web 3.0 Holdings:8月10日消息,Web3 平臺 Looking Glass Labs Ltd. 宣布以 315 萬美元的價格收購 Web 3.0 Holdings Corp.,后者匯集了一系列以零售為重點的數字資產,包括跨界數字身份代碼腳本和數字分銷產品框架,Looking Glass Labs Ltd. 則專注于研究 NFT 架構、沉浸式元宇宙虛擬世界、P2E 游戲和虛擬資產版稅,此次收購將允許 Looking Glass Labs 完全訪問 Web 3.0 Holding 的專有零售技術平臺。(雅虎財經)[2022/8/10 12:15:07]
做這件事情非常有挑戰,首先沒有任何前人的工作供我們參考。挑戰一:如何在算術電路中進行科學計算。科學計算里有大量的小數與浮點數運算。我們選擇在有限域上編碼定點數,對VGG16模型所有的數據做歸一化處理,保證所有的數不超過256。取六位小數定點數,8bit表示整數部分,6bit表示小數部分,用24個bit表示一定點數。用數字電路實現定點數上的各種運算。挑戰二:R1CS矩陣巨大無比,需要PB級別內存。一般計算機的內存是GB的,服務器到幾百G內存已經算很大了。如果真的把R1CS矩陣算術電路編碼出來,需要PB級的內存。正常的機器難以承受。我們算了一下做VGG16圖像識別,需要146億個乘法門。據我們所知,這是世界上首次進行如此大規模的實用算法的零知識證明。乘法數量分布大部分是卷積層,做深度神經網絡時大量是卷積運算,占90%以上。電路矩陣太大了,我們不得不發明了一種新的零知識證明方案——CLINK,用來證明圖片識別過程。CLINK與其它零知識證明方案相比,采取了一些特殊的技術來處理大規模電路。技術一:巨大電路里有著大量相重復的電路。就圖像識別而言,有非常多的卷積層,這么多卷積層的電路部分是相似的,可以把相似的進行合并處理。技術二:巨大電路可以進行拆解,拆成很多小電路,這樣內存可以放得下小電路,一個一個做,做完以后再鏈接起來。電路拆解完但多個電路之間連線的部分需要保護,這些值仍然是秘密,是不能暴露出來的。我們仍然用承諾把中間所有子電路之間暴露出來的連線保護起來。然后就能實現電路的拆解。相同的子電路可以合并證明。最后對巨大電路產生了好多個零知識證明,加上中間值承諾,最后拼成完整的零知識證明。過程中為子電路產生零知識證明,對中間暴露的線計算承諾,中間值不作為公共輸入/輸入把結果打包再壓縮。我們做了兩個實驗方案:方案一:盡量發揮多核CPU的優勢,同時并行計算VGG16,所有16層的電路一起并行證明,所有承諾層之間的鏈接證明是同時做的。方案二:串行一層一層來,先做第一層第二層,再做第一層和第二層之間的鏈接證明。這里非常感謝QTUM團隊給我們提供了超級服務器,配備有1TB內存,高性能的SSD。我們先用第一個并行方案,因為并行方案仍然需要很大的內存,雖然不需要PB級,但跑完并行方案大概花了5TB的內存,其中4TB是跑交換分區上。因為整個過程使用到了SSD交換分區,所以性能會受到很大的影響。并行方案:證明圖片識別224×224分辨率的小貓,證明時間要花25個小時。如果給一臺4TB內存的機器,可能只需要花5小時,但4TB內存的機器很難找,而驗證時間要花1個小時。證明長度在80KB,內存占用峰值是5TB。串行方案:看起來慢一些,但在機器上跑速度反而更快,因此只用到了500GB內存,沒有用到交換分區,所以整體上更快一點,證明時間為20小時,驗證時間在1小時,證明長度110KB。在我們做實驗的過程中,韓國的學者也發了一篇論文草稿,在和我們做很類似的工作。最大的不同是他們對VGG16進行了一些妥協性修改,特別是在電路里做Maxpooling的時候非常困難,于是改用平均值的方式做pooling。他們當中引入了非常大的83GB的CRS。在我們的方案里CRS非常小,實用性更好。這是我們所能知道的國際上的最新研究成果。大數據零知識證明的應用前景
OpenSea在遭美國唱片業協會投訴后取消數十個音樂相關ENS域名拍賣:金色財經消息,NFT市場OpenSea在收到美國唱片業協會(RIAA)的停止和終止信函后,取消了“universalmusic.eth”、“atlanticrecords.eth”等數十個以音樂為主題的ENS域名拍賣。
RIAA認為,OpenSea托管的這些ENS拍賣違反了美國商標法,該法律禁止創建包含“惡意營利”商標的網絡域。Web3初創公司Quadrata總法律顧問Jeffrey Blockinger表示,OpenSea對RIAA信函的初步反應表明,Web3公司開始意識到傳統產權及其保護價值可以促進NFT作為資產類別的發展。(blockworks)[2022/7/16 2:16:53]
零知識證明已經從理論走向工程,正逐步走向應用,未來將可以處理更大量的數據。我們在探索過程中研究出的CLINK算法,可以支持大數據的統計、查詢、以及其它復雜的操作,甚至包括深度神經網絡的推斷過程。未來這些技術都可以用在:1、可驗證數據庫。每個人可以把數據放在數據庫里,但從來不需要把數據庫告訴任何人。當別人跟你要數據的時候都可以把數據做一定的處理,但可以證明對處理并沒有造假,同時保證數據真的有價值。可驗證數據庫是未來讓互聯網公司通過非常安全的手段共享數據,提供了新的技術方向。2、可驗證的隱私保護技術。個人數據比如說健康數據、出行記錄需要通過加噪音來保護隱私,再交給第三方的互聯網公司,通過機器學習給我們提供更好的服務。但又保證數據的可用性與真實性。在個人隱私得到充分保護的情況下給商業公司共享更好的數據,讓他們反過來為我們提供更好的服務,是未來數字經濟的商業模式。如果大家對零知識證明、人工智能、機器學習感興趣的話可以與我們線下討論交流,謝謝大家。
9月15日上午,詹克團召開全員大會,針對北京法人再次變更發表以下觀點。他表示已經馬上提起了行政復議,理論上還能變回來。同時北京奧北科技園、深圳工廠兩地正在緊急轉移物資。1、非常意外,完全非法.
1900/1/1 0:00:00編者按:本文來自以太坊愛好者,作者:LakshmanSankar,翻譯&校對:閔敏&阿劍,Odaily星球日報經授權轉載。每當情況突然偏離預期,人們就開始思考如何更改已有系統.
1900/1/1 0:00:00Odaily星球日報譯者|念銀思唐 摘要: -轉移到以太坊區塊鏈上的比特幣目前價值超過8億美元,本月迄今上漲37%;-WrappedBitcoin和renBTC仍是最受歡迎的傳輸協議.
1900/1/1 0:00:00文|王也編輯|郝方舟出品|Odaily星球日報 像Findora這種具有原生隱私層的去中心化金融基礎設施,將會成為孕育各類DeFi應用發展的最佳場所之一.
1900/1/1 0:00:00編者按:本文來自巴比特資訊,作者:MikeMcDonald,編譯:屏風,星球日報經授權發布。本文將介紹一下Balancer的流動性引導池.
1900/1/1 0:00:00編者按:本文來自熊熊薈PLUS,作者:梭教授,Odaily星球日報經授權轉載。早上起來看了眼,蠻有意思的,大家都漲回來了,有點兒莫名其妙的感覺,有種青春回來的感覺,然后又去睡了個回籠覺,醒來發現.
1900/1/1 0:00:00