龍蜥開發者說:從入坑到入門 | 第 2 期

OpenAnolis小助手發表於2022-03-17
「龍蜥開發者說」來了! 開發者與開源社群相輔相成,相互成就,這些個人在龍蜥社群的使用心得、實踐總結和技術成長經歷都是寶貴的,我們希望在這裡讓更多人看見技術的力量。 本期故事,我們邀請了龍蜥社群開發者張天佳來分享,聊一聊「從入坑到入門」的那些事兒。

歡迎閱讀上期故事 《龍蜥開發者說:做開源,興趣是最好的源動力 | 第1期》。開發者說系長期活動,對於積極投稿、多次分享的童鞋,我們還有神祕大禮鼓勵!誠邀開發者們分享真實體驗,以文會友、共同學習、一起進步。

本期故事主角: 張天佳 ,龍蜥社群 商密軟體棧 SIG  Maintainer, 安全技術開發,專注於國內商用密碼的技術開發以及推廣工作。

回想自己與程式設計的經歷,從最初的一通瞎折騰,到現在能 參與以及 貢獻基礎軟體社群,已經有十多年時間了 。很遺憾,這段經歷的大多半時間都是走在一個錯誤的方向上的,至少現在我是這麼認為的。確實沒有什麼精彩的故事, 藉著給龍蜥社群朋友們分享的契機講一講, 位看官權且當作教訓來看,當作吃別人一塹,長自己一智吧。

我上學的主攻方向不是軟體工程,也不是計算機,也沒有研究什麼課題,而是當時感覺非常沒有前途的電子科學,現在也只是依稀記得那些課程名字,至於具體內容是什麼,已經模糊了。這就導致有了挺多時間打遊戲,那時還很流行組隊打星際和魔獸爭霸,許多工具軟體都要去網上找破解版,電腦需要不斷通過全盤防毒來保持健康狀態,也不知道 Linux 是做什麼用的。當時看那些能破解軟體、寫出工具的黑客們真是羨慕不已, 也許是出於興趣,有意無意就關注了起來, 從網路和論壇看到他們經常用到一種奇怪的語言,後來才知道那是組合語言,在沒有計算機基礎也沒有人指引的情況下, 走上了這條現在看來方向明顯不對的道路,很慶幸自己居然沒有放棄。
後來,我就找了一些書籍資料在 Windows 下模仿寫了一些使用 win32 API 的視窗程式,那時感覺還不錯。因為學校的 C 語言課程,老師只會講一些語法跟考試的內容,除了考二級也不知道還能用來做什麼,這樣一比較視窗程式顯然更像一個真正的程式,雖然簡單但能讓人產生興趣也更接近工程實用。就這樣斷斷續續幾年居然基本掌握了 x86 彙編和 Win32 的主要 API,也對系統基礎有了一定了解。因為自己的認知盲區,錯誤地選擇了入門開發語言和開發環境,導致後來走了很多年的彎路。
很幸運,畢業之後沒有失業,也沒有從事科班工作,憑藉自修的豐富的程式設計經驗?, 終於混進了現在看起來是傳統得不能再傳統的主機安全行業,主要工作內容也是開發防毒軟體所需要的實時監控,以及一些惡意軟體的分析工作。 那是 2010 年,正是 PC 機火熱的時代,沒有移動網際網路,當時的防毒軟體還是裝機必備、熱門賽道,有諸多的企業在裡面競爭,一點不亞於現在的社群團購。有多熱門呢,當時的 360 還是可以跟騰訊叫板的,並且還能得到網路上的普遍支援,可以跟十年之後的現在做一個對比。

扯回正題,因為工作涉及系統開發的緣故,抱著很不情願的狀態開始使用 C 語言,也許是有彙編基礎,C 語言學習起來就順利了很多,對於許多人詬病的指標好像也沒說的那麼複雜。其實當時行業主流使用的是 C++ 語言,奈何一直沒有學會,直到現在也是一知半解。就這樣渾渾噩噩的六年多,分析過 CVE、寫過 POC、核心監控、各種 HOOK 信手拈來,開發語言也主要集中在 C、lua 和彙編。但是基本沒做什麼像樣的專案,隨著近幾年作業系統自身安全性提升和軟體分發的把控,作業系統安裝一個專門的主機安全軟體的必要性也越來越小。

也許因為安全背景,兩年前偶然的機會混進了作業系統 OS 安全,基礎軟體的安全方向跟傳統的主機安全還是有挺大區別的。 傳統安全熱衷於攻防,魔高一丈道高一尺,魔再高道更高,這樣的無限迴圈,好像永遠也到達不了安全的終點,也做不到 100% 的安全。就比如現在非常流行的勒索軟體,這是伴隨著加密貨幣而誕生的一種簡單粗暴的惡意軟體,比特幣 09 年就誕生了,那還是一個普遍使用諾基亞的時代,阿里雲是那時才開始創業的,iPhone 也才剛剛出道,這十多年雲端計算和移動網際網路對人們生活的改變,帶來的社會價值都是有目共睹的。
然而,一個誕生了十多年的加密貨幣除了催生了一些不能活在陽光下的行業外,似乎沒給社會帶來什麼改變。當然區塊鏈那是另一碼事,以至於現在還有不少人覺得加密貨幣是一個新事物。勒索軟體目前在主機端依然沒有很好的解決辦法,我們只能避免這樣的情況發生,也許真的要靠加密貨幣的自然覆亡來解決勒索軟體。這樣攻防帶來的另一個問題是沒法標準化,你的矛升級了,我的盾也得更新,攻一方儘可能隱藏自己的攻擊方式,防守方也要保密自己的防守細節。這樣的安全方案隨著時間推移邊際價值是遞減的。
從基礎軟體層面來考慮安全問題就大不相同了,比如數字簽名、加密演算法、TLS 協議以及 HTTPS,這些目前都已經是計算機和網際網路的安全基石,也是從根本上解決安全問題,是一個比較徹底的解決方案,也更容易成為國際通用的方案,其次解決方案規範是公開的,會充分暴露出設計的缺陷,有助於安全能力的逐步提升。
我剛到作業系統團隊的時候,接到的一個需求就是在 Linux 核心實現國內的商用密碼公鑰演算法 SM2,我對密碼演算法之前是沒有什麼開發經驗的,經過大半年的開發和社群交流,最終能把 SM2 做到 Linux 上游社群也實在是僥倖。關於這一段經歷,大家可以移步舊文—— 終於,SM2 國密演算法被 Linux 核心社群接受了! ?
之後正好趕上了龍蜥作業系統社 的成立,彼時國內面臨外部的貿易衝突和技術封鎖,以及國內資料安全問題,我們 決定把全軟體棧的國密做大做強,依託於作業系統給支援起來 我們在龍蜥社群的工作,可以參考 「商密軟體棧SIG」,上面記錄了我們的週報、月報和一些最佳實踐案例,有比較詳細的介紹。
龍蜥社群是一個更加開放的平臺,有了能對外輸出的平臺,我的工作可以以社群方式來運作起了,同時進展也會更快,能跟社群內有相同興趣的夥伴協同工作,也第一時間把我們的工作成果帶給社群使用者和開發者。

我很喜歡我們公司內部的一句話 「一次性把事情做對」 ,拿國密來說,從開始的演算法標準制定到現在也有十多年的時間了,目前仍然沒有被廣泛使用是有原因的,工程上的碎片化是很重要的一點,這也是我們一開始堅持的原則,龍蜥的國密不是要做另一個碎片的國密實現,而是把國密的工程實現統一到日常使用的基礎軟體中去,避免以後國內大量的資源和人力重複投入,一次性把這個事情做好。

有了核心 SM2 演算法的成功經驗後,我們的動力更足了,陸續在 libgcrypt、OpenSSL、coreutils、IMA,甚至 Rust 生態 RustCrypto 等基礎軟體或者密碼演算法場景中支援了國內的商用密碼演算法,並且為 SM3/4 演算法支援了 x86 和 Arm64 平臺的指令集優化、以及 KTLS 國密演算法的支援。 目前我們在商密生態多年的開發工作已經全部回饋到了社群,其中絕大部分貢獻到了主流開源專案的上游,總程式碼量超過萬行 。比如我們在 Arm64 架構下做了 NEON 和 Crypto Extensions 指令集優化,效能有了質的飛躍。?


sm4-generic |     16       64      128      256     1024     1420     4096   

ECB en c |  80.05    91.42    93.66    94.77    95.69    95.77    95.86

ECB dec |  79.98    91.41    93.64    94.76    95.66    95.77    95.85

CBC enc |  78.55    86.50    88.02    88.77    89.36    89.42    89.48

CBC dec |  76.82    89.06    91.52    92.77    93.75    93.83    93.96

CFB enc |  77.64    86.13    87.62    88.42    89.08    88.83    89.18

CFB dec |  77.57    88.34    90.36    91.45    92.34    92.00    92.44

CTR enc |  77.80    88.28    90.23    91.22    92.11    91.81    92.25

CTR dec |  77.83    88.22    90.22    91.22    92.04    91.82    92.28

sm4-neon

ECB enc |  28.31   112.77   203.03   209.89   215.49   202.11   210.59

ECB dec |  28.36   113.45   203.23   210.00   215.52   202.13   210.65

CBC enc |  79.32    87.02    88.51    89.28    89.85    89.89    89.97

CBC dec |  28.29   112.20   203.30   209.82   214.99   201.51   209.95

CFB enc |  79.59    87.16    88.54    89.30    89.83    89.62    89.92

CFB dec |  28.12   111.05   202.47   209.02   214.21   210.90   209.12

CTR enc |  28.04   108.81   200.62   206.65   211.78   208.78   206.74

CTR dec |  28.02   108.82   200.45   206.62   211.78   208.74   206.70

sm4-ce-cipher

ECB enc | 336.79   587.13   682.70   747.37   803.75   811.52   818.06

E CB dec | 339.18   584.52   679.72   743.68   798.82   803.83   811.54

CBC enc | 316.63   521.47   597.00   647.14   690.82   695.21   700.55

CBC dec | 291.80   503.79   585.66   640.82   689.86   695.16   701.72

CFB enc | 294.79   482.31   552.13   594.71   631.60   628.91   638.92

CFB dec | 293.09   466.44   526.56   563.17   594.41   592.26   601.97

CTR enc | 309.61   506.13   576.86   620.47   656.38   654.51   665.10

CTR dec | 306.69   505.57   576.84   620.18   657.09   654.52   665.32

sm4-ce

ECB enc | 366.96  1329.81  2024.29  2755.50  3790.07  3861.91  4051.40

ECB dec | 367.30  1323.93  2018.72  2747.43  3787.39  3862.55  4052.62

CBC enc | 358.09   682.68   807.24   885.35   958.29   963.60   973.73

CBC dec | 366.51  1303.63  1978.64  2667.93  3624.53  3683.41  3856.08

CFB enc | 351.51   681.26   807.81   893.10   968.54   969.17   985.83

CFB dec | 354.98  1266.61  1929.63  2634.81  3614.23  3611.59  3841.68

CTR enc | 324.23  1121.25  1689.44  2256.70  2981.90  3007.79  3060.74

CTR dec | 324.18  1120.44  1694.31  2258.32  2982.01  3010.09  3060.99

非常感謝社群各合作伙伴的支援,以及社群工作人員的辛苦付出,經過一年多的努力,我們基本構建起了商密的基礎軟體設施,不僅解決了從無到有的問題,也把商密的效能提升到真正能產業化應用的程度, 也依託於龍蜥作業系統(Anolis OS)釋出了支援全棧商用密碼的Anolis 商密版OS ,當然這個生態不管是橫向還是縱向還有很多工作要做,需要更多內部和外部開發者參與進來一起建設,我們非常歡迎與大家一起合作。
(圖/開發者峰會演講)

程式語言世界素來有江湖門派之爭,文中難免涉及個人主觀判斷,只是代表個人想法和意見,僅供大家參考。

以下是我們團隊在龍蜥社群上的商密軟體棧 SIG,非常歡迎有興趣的開發能參與進來,為中國的基礎軟體安全添磚加瓦。
SIG及程式碼庫地址相關連結可移步龍蜥公眾號(OpenAnolis龍蜥)2022年3月16日相同推送檢視。

釘釘交流群:35789429

本期分享到這裡結束,期待下期精彩分享哦!

—— 完 ——

加入龍蜥社群

加入微信群:新增社群助理-龍蜥社群小龍(微信:openanolis_assis),備註【龍蜥】與你同在;加入釘釘群:掃描下方釘釘群二維碼。歡迎開發者/使用者加入龍蜥社群(OpenAnolis)交流,共同推進龍蜥社群的發展,一起打造一個活躍的、健康的開源作業系統生態!

關於龍蜥社群

龍蜥社群OpenAnolis)是由 企事業單位、高等院校、科研單位、非營利性組織、個人等在自願、平等、開源、協作的基礎上組成的非盈利性開源社群。龍蜥社群成立於 2020 年 9 月,旨在構建一個開源、中立、開放的Linux 上游發行版社群及創新平臺。

龍蜥社群成立的短期目標是開發龍蜥作業系統(Anolis OS)作為 CentOS 停服後的應對方案,構建一個相容國際 Linux 主流廠商的社群發行版。中長期目標是探索打造一個面向未來的作業系統,建立統一的開源作業系統生態,孵化創新開源專案,繁榮開源生態。

目前, 龍蜥OS 8.4 已釋出,支援 X86_64 、Arm64、LoongArch 架構,完善適配飛騰、海光、兆芯、鯤鵬、龍芯等晶片,並提供全棧國密支援。

歡迎加入我們,一起打造面向未來的開源作業系統!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2871718/,如需轉載,請註明出處,否則將追究法律責任。

相關文章