主頁 > 軟體工程 > 什么是代碼加密?基于云效 Codeup的代碼倉庫加密是如何實作的?

什么是代碼加密?基于云效 Codeup的代碼倉庫加密是如何實作的?

2021-09-30 07:14:51 軟體工程

什么是代碼加密?基于云效 Codeup的代碼倉庫加密是如何實作的?在互聯網快速發展的時代,代碼是企業最核心的資產,代碼安全也是首當其沖;為了保護企業代碼安全,各公司使出的手段也是五花八門,但未必安全,而云端加密代碼服務是阿里云 云效團隊的自研產品,是目前國內率先支持代碼加密的托管服務,能夠有效的阻斷代碼對運維人員的可見性,從而消除用戶上云的顧慮,   本篇文章為大家揭秘業界創新的代碼倉庫加密技術背后的知識,    

01 / 什么是代碼加密?

云端加密代碼服務是云效團隊的自研產品,是目前國內率先支持代碼加密的托管服務,也是目前世界范圍內率先基于原生Git實作加密方案的代碼托管服務,   通過在云端對托管在云效 Codeup 的代碼庫進行落盤加密,可以有效避免資料擁有者之外的人接觸到用戶的明文資料,避免資料在云端發生泄露,同時,代碼加密程序對用戶完全透明,用戶可以使用任意官方Git端(包括但不限于Git、JGit、libgit2等)來訪問Codeup上的代碼倉庫,

02 / Linux社區重大安全性事件回顧

2011年8月底,用于維護和分發 Linux 作業系統的多臺服務器感染了惡意軟體,這些惡意軟體非常厲害,可以獲取 root 的訪問權限,修改其上的系統軟體以及登錄密碼,但社區的維護者稱,維護 linux 的源代碼,是未受到漏洞影響的,   這是為什么呢?因為他們使用了 Git 進行代碼維護,對于 linux 內核代碼將近40000個檔案來說,每個檔案都做了 hash 來確保唯一性,因此很難在不引起注意情況下,更改舊的版本,       雖然Git可以解決開源社區關心的原始碼篡改問題,卻解決不了企業擔心的資料泄露問題,而對于企業級代碼托管來說,今天所面臨的問題不但有資料安全、還有可靠性成本問題   當企業規模較小時,對可靠性要求也不高,一個自建的代碼托管服務似乎就能滿足需求,但隨著規模不斷擴大,代碼量不斷增加,可能需要更好的服務器配置,才能滿足多人協作的需求,甚至還需要投入專人維護來保證可靠性,這時就不得不思考成本的問題,   而云代碼托管服務,有著比自建代碼托管服務更高的可靠性及更低的成本,但相比自建代碼托管服務而言,由于其并不開放底層存盤的直接訪問,間接造成了用戶不可控的安全心理,   而代碼加密技術,正是通過將底層存盤的不可控變為近完全可控,解決用戶代碼上云的顧慮,  

03 / 自建真的比上云更安全么?

在回答這個問題之前,讓我們一起來了解一些背景知識——Git的存盤結構,     當我們使用Git進行代碼提交時,最先接觸到的便是提交記錄及分支,分支或者標簽,可以統稱為參考,它們存盤在以路徑名作為參考名,以及對應版本hash作為內容的單個檔案中,由于分支名通常與業務無關,所以可以認為,其中不包含敏感資料的,   除了提交記錄commit之外,我們的代碼檔案被存盤到blob物件,檔案名及目錄等資訊,存盤到tree物件,帶有額外的資訊的標簽被存盤到tag物件,   物件是Git中存盤資料的基本單元,通常情況下,物件存盤在以內容hash值命名的單個檔案中,我們稱之為松散物件,而通過執行gc(也就是垃圾回收)之后,這些物件就會被打包到一起,生成一個打包檔案packfile,代碼內容及檔案名,都存盤在blob及tree物件當中,所以可以認為,物件中是包含用戶的代碼內容資料,也就是包含敏感資料的,   Git中的物件存盤,為了降低磁盤占用,會通過zlib進行一次資料的壓縮,換句話說,只需通過解壓縮就可以獲取到資料內容,所以可以認為是明文存盤,也就是說,任意可以接觸到存盤的人,都可以查看存盤上的代碼資料,   明文存盤引發的信任問題   回答前面提出的問題,正是由于Git代碼非安全存盤的特點,自建的代碼托管服務,既要防范來自外部的一些攻擊風險,還要防范內鬼,因為通常企業代碼資料泄露是從內部發生       而對于云代碼托管服務而言,我們可以借助阿里云安全,有效避免來自外部的黑客攻擊風險,那么,如何解決用戶對云代碼托管服務的信任問題,讓代碼對運維人員不可見呢?   引入代碼加密技術,通過使用用戶的密鑰,加密云端托管的代碼資料,既增加了靜態存盤資料的安全性,又可以阻斷代碼對運維人員的可見性,從而消除用戶上云的顧慮,

04 / 代碼加密技術揭秘

把它分化三個問題去解決:   1.密鑰管理   使用一個安全合規的方式托管密鑰,密鑰存盤安全,才能保證加密安全,這個可以借助阿里云的密鑰管理服務KMS,   2.密鑰使用   Git是一個計算密集型的服務,如果直接使用密鑰管理服務的加解密能力,那么這個性能是難以接受的, 那這里還有什么方案呢?我們可以使用信封加密技術,顧名思義,我們可以使用資料密鑰,來對我們明文的代碼資料進行加密,使用數字信封技術,保證密鑰保存、傳輸、使用程序的安全性,由于我們只存盤密文的資料密鑰及密文的代碼資料,必須通過用戶授權,才能完成運行態的代碼資料解密,而處于靜態存盤的代碼資料,則無法被運維人員獲取,   3.基于原生Git的加密實作   在原生Git的基礎上,通過增加代碼加密補丁,以在實作加密的能力同時,最大程度地獲取到原生Git帶來的各種優勢,   原生Git是如圖所示的這樣一個自上而下的分層架構,和我們常見的應用架構非常類似,       最上層是展現層,包含紛繁復雜的命令列入口,直接暴露給應用服務進行呼叫, 中間是業務處理層,從資料內容角度,可以分為參考操作及物件操作,通過增加一個加解密的模塊,在記憶體中進行資料加密,將密文資料寫入磁盤,從而保證靜態資料的安全性, 為了獲取最高的性能,僅選擇與用戶代碼資產相關的物件資料進行加密存盤,而對于參考串列及物件索引等資料,仍維持明文存盤,利用硬體加速,代碼加密的額外性能損耗控制在10%左右,在用戶使用程序中幾乎無感,本地Git代碼加密演示   事先準備好一個配置了代碼加密的的倉庫,這個倉庫是空的,   我們向里面添加一個檔案,   通過hexdump -C查看這個檔案的二進制內容,我們可以發現,它是以首位元組78 01起始,這是一個典型的經過zlib壓縮后的檔案頭,       接下來,我們開啟加密的開關,通過git commit創建一個加密的提交記錄,再次查看保存的提交記錄二進制內容,發現這時創建的物件資料不再以78 01開始,而是以我們指定的加密標記位開始,   注意,受時間關系,這里我們未進行同一個物件非加密與非加密狀態下的直接對比,而是以檔案頭是否變化來判斷加密與否   在完成松散物件加密之后,我們可以通過git gc ,將松散物件轉換為打包物件,再看一下打包物件會發生什么樣的變化呢?由圖中我們可以發現,加密后的打包檔案包頭版本中,不再是原有的00 00 00 02,而是增加了特定標識的82 00 00 02,并且包頭也由原有的12位元組擴展為24位元組,增加了12位元組的NONCE用于增加安全性,     那么,當我們移除密鑰配置之后,是否可以繼續訪問這個倉庫呢?   當我們移除密鑰之后,由于缺少密鑰,當我們嘗試通過git show HEAD 查看當前版本時,會得到一個錯誤資訊,提示未提供密鑰,   這個錯誤是基于我們在原生Git基礎上,定制化了代碼加密能力補丁,若是沒有這個補丁,會有什么樣的表現呢?   針對加密的打包檔案packfile,會提示當前版本較低,請升級Git版本;若針對松散物件,則提示檔案頭不正確,因為不是一個zlib的壓縮頭,     所以別再自建的代碼托管服務,既要防范來自外部的一些攻擊風險,還要防范內鬼,因為通常企業代碼資料泄露是從內部發生,我們可以借助阿里云安全,有效避免來自外部的黑客攻擊風險,云效代碼管理Codeup,10萬企業都在用的代碼管理平臺,能夠全方位保護企業代碼資產,幫助企業實作安全、穩定、高效的代碼托管和研發管理,  

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/304218.html

標籤:其他

上一篇:Jenkins持續集成與部署

下一篇:如何通過云效Codeup高效落地分支模式,提升開發協作率

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more