[爆卦]null程式是什麼?優點缺點精華區懶人包

雖然這篇null程式鄉民發文沒有被收入到精華區:在null程式這個話題中,我們另外找到其它相關的精選爆讚文章

在 null程式產品中有14篇Facebook貼文,粉絲數超過2,850的網紅矽谷牛的耕田筆記,也在其Facebook貼文中提到, ref: https://www.cyberark.com/resources/threat-research-blog/securing-kubernetes-clusters-by-eliminating-risky-permissions 本篇文章是一個基礎分享文,整個主軸圍繞於 Authe...

 同時也有2部Youtube影片,追蹤數超過2萬的網紅奮game王紫楓,也在其Youtube影片中提到,#軟體工程師 #Kotlin 👍歡迎訂閱!! 🔔🔔按下小鈴鐺,就可以一有新影片就搶先看! [軟體工程師雜談] 專業Android工程師來聊聊:Kotlin的10大優點 0:00 開場 0:51 紫楓自介 1:39 Kotlin的10大優點 1.完全相容於Java 2.結尾不用分號 3.好用的...

  • null程式 在 矽谷牛的耕田筆記 Facebook 的最讚貼文

    2021-08-14 08:00:10
    有 52 人按讚

    ref: https://www.cyberark.com/resources/threat-research-blog/securing-kubernetes-clusters-by-eliminating-risky-permissions

    本篇文章是一個基礎分享文,整個主軸圍繞於 Authentication 與 Authorization 兩大塊,同時透過這兩大概念的介紹來分享一些會可能會有資安問題的設定

    開頭作者探討了 Kubernetes 的架構,並且將 API Server 這個重點核心拿來出探討,提到為了存取 Kubernetes API,使用者必須要經過三個階段的處理,分別是
    Authentication, Authorization 以及 Admission Control

    接者用一個簡單的流程來說明上述三者的差異,假設今天有一個 Client 想要請求 API Server 幫忙創建一個 Pod 的物件。
    首先 API Server 會針對該請求進行 Authentication 的檢查,通常情況下會使用 Certificate, Tokens, Basic Authentication(username/password) 來判別。
    如果通過後,則會進入到 Authorization 的階段,該階段要判別發送當前 Request 的 Client 是否擁有創建 Pod 的權限,如果有權限就會把相關操作交給後續的 Admission Control 來處理。
    文章中舉了一個名為 AlwaysPullImages 的 Admission Controller,該 Controller 對於一個多用戶的 Kubernetes Cluster 來說特別有用,主要是用來確保使用者 A 想要使用的 Private Image 不能被使用者 B 存取。
    試想一個情況,假設今天使用者 A 順利於 NodeA 上抓取了自己的 Private Image,那使用者 B 假如很剛好知道這個 Image 的名稱,是不是有機會就可以不需要相關權限直接使用 NodeA 上的 Image?
    所以這個 Admission Controller 就是用來避免這個問題的。

    接者作者從 Authentication 與 Authorization 中個挑選一個方式來介紹並且講解這兩者如何結合的。

    Authentication 使用的是 Service Account Token,管理會事先於 Kubernetes 內創立一個相關的 Service Account,並且把該 SA(Service Account) 的 Token 給交給 Client(Kubeconfig 也可)
    Client 發送 HTTPS 請求到 API Server 的時候就可以夾帶這個 Token 的資訊,這樣 API Server 就會去檢查該 Token 是否存在於 Cluster 內。

    事實上當每個 Pod 被創立後, Kubernetes 預設情況下就會將該 namespace 下的 service account 資訊給掛載到該 Pod 內的 "/var/run/secrets/kubernetes.io/serviceaccount" 這個路徑
    這樣該 Pod 就可以使用該 Service Account Token 的資訊與 API Server 溝通。

    Authorization 則是使用 RBAC 的方式來處理, RBAC 由三個部分組成,分別是 Role(代表可以針對 Cluster 進行什麼樣類型的操作,譬如 create pod, delete pod), Subject(你是誰,譬如 Service Account), RoleBinding(用來將 Role 與 Subject 給綁定)

    管理員要創建並且管理這些叢集的話,就要好好的去設計這三個物件的關係,來確保最後的 Client 可以擁有剛剛好符合其需求的權限,千萬不要為了懶散而給予過多權限。

    接者作者列舉了五種 Risky permissions 的可能情境
    1. Listing secrets
    大部分的應用程式開發者都會使用 secret 的物件來管理一些機密資訊,如帳號密碼,憑證等,所以一個擁有 list secrets 的 service account 其實是相對危險的。
    非必要的話,不要讓管理員以外的任何使用者有這個權限,特別是使用 ClusterRole/ClusterRoleBinding 時要特別注意

    2. Creating a pod with a privileged service account
    假設今天有一個攻擊者已經獲得一個可以創建 pod 的 service account,那該攻擊者已經可以很順利的於叢集內創建 Pod 去進行基本操作(譬如挖礦)
    如果攻擊者很巧地又知道目標 namespace 內存在一個很強的 service account,它就有辦法讓他創立的 Pod 去使用這個很強的 Service Account 並且進行更多後續操作

    3. Impersonating privileged accounts
    作者提到 Impersonating 這個 Role 裡面的動作要特別小心使用,擁有這個權限的使用者可以輕鬆化身為其他的使用者/群組
    舉例來說,一個擁有 Impersonating -> users/group 的 serviceaccount 是沒有辦法看到任何 secrets 的物件。
    但是攻擊者只要使用的時候加上 --as=null --as-group=system:master 則就會變成如 master 般的上帝擁有這些權限
    因此這種權限設定上要特別小心

    4. Reading a secret – brute-forcing token IDs
    5. Creating privileged RoleBindings

    後續兩個有興趣的可以參考全文,都是滿有趣的一些想法,值得閱讀擴展自己的認知

  • null程式 在 軟體開發學習資訊分享 Facebook 的最佳解答

    2021-07-17 20:59:23
    有 22 人按讚

    垃圾收集器的必備基礎

    記憶體洩漏( Memory leaks ) 和迷途指標( dangling pointers )是手動記憶體管理的主要問題。 你在連結串列中刪除了父節點,卻忘了先刪除它的所有子節點ーー你的記憶體正在洩漏。 你以正確的順序刪除一個物件鏈ー但是突然你的程式崩潰了,因此你忘記了這個資源的第二個所有者,這個資源現在試圖取消參考( dereference ) 一個空指標( null-pointer )。

    為了避免這些問題,大多數現代高階程式語言實現了自動記憶體管理。 你可以手動分配物件的記憶體,但是不必擔心它們的釋放: 一個特殊的程式,垃圾收集器,知道如何正確地自動釋放物件,並回收它們以供將來重複使用。

    在“垃圾收集器必備基礎”課程中,我們學習了與自動記憶體管理相關的所有不同的技術和演算法,這些技術和演算法現在已經在實踐中得到了應用。

    https://softnshare.com/essentials-of-garbage-collectors/

  • null程式 在 Taipei Ethereum Meetup Facebook 的最讚貼文

    2021-06-21 17:57:07
    有 0 人按讚

    📜 [專欄新文章] Merkle Tree in JavaScript

    ✍️ Johnson

    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    這篇文章會說明 Merkle Tree 的運作原理,以及解釋 Merkle Proofs 的用意,並以 JavaScript / TypeScript 簡單實作出來。

    本文為 Tornado Cash 研究系列的 Part 1,本系列以 tornado-core 為教材,學習開發 ZKP 的應用,另兩篇為:

    Part 2:ZKP 與智能合約的開發入門

    Part 3:Tornado Cash 實例解析

    Special thanks to C.C. Liang for review and enlightenment.

    本文中實作的 Merkle Tree 是以 TypeScript 重寫的版本,原始版本為 tornado-core 以 JavaScript 實作而成,基本上大同小異。

    Merkle Tree 的原理

    在理解 Merkle Tree 之前,最基本的先備知識是 hash function,利用 hash 我們可以對資料進行雜湊,而雜湊後的值是不可逆的,假設我們要對 x 值做雜湊,就以 H(x) 來表示,更多內容可參考:

    一次搞懂密碼學中的三兄弟 — Encode、Encrypt 跟 Hash

    SHA256 Online

    而所謂的 Merkle Tree 就是利用特定的 hash function,將一大批資料兩兩進行雜湊,最後產生一個最頂層的雜湊值 root。

    當有一筆資料假設是const leaves = [A, B, C, D],我們就用function Hash(left, right),開始製作這顆樹,產生H(H(A) + H(B))與H(H(C) + H(D)),再將這兩個值再做一次 Hash 變成 H(H(H(A) + H(B)) + H(H(C) + H(D))),就會得到這批資料的唯一值,也就是 root。

    本文中使用的命名如下:

    root:Merkle Tree 最頂端的值,特色是只要底下的資料一有變動,root 值就會改變。

    leaf:指單一個資料,如 H(A)。

    levels:指樹的高度 (height),以上述 4 個資料的假設,製作出來的 levels 是 2,levels 通常會作為遞迴的次數。

    leaves:指 Merkle Tree 上的所有資料,如上述例子中的 H(A), H(B), H(C), H(D)。leaves 的數量會決定樹的 levels,公式是 leaves.length == 2**levels,這段建議先想清楚!

    node:指的是非 leaves 也非 root 的節點,或稱作 branch,如上述例子中的H(H(A) + H(B)) 和 H(H(C) + H(D))。

    index:指某個 leaf 所在的位置,leaf = leaves[index],index 如果是偶數,leaf 一定在左邊,如果是奇數 leaf 一定在右邊。

    Merkle Proofs

    Merkle Proofs 的重點就是要證明資料有沒有在樹上。

    如何證明?就是提供要證明的 leaf 以及其相對應的路徑 (path) ,經過計算後一旦能夠產生所需要的 root,就能證明這個 leaf 在這顆樹上。

    因此這類要判斷資料有無在樹上的證明,類似的說法有:proving inclusion, proving existence, or proving membership。

    這個 proof 的特點在於,我們只提供 leaf 和 path 就可以算出 root,而不需要提供所有的資料 (leaves) 去重新計算整顆 Merkle Tree。這讓我們在驗證資料有沒有在樹上時,不需要花費大量的計算時間,更棒的是,這讓我們只需要儲存 root 就好,而不需要儲存所有的資料。

    在區塊鏈上,儲存資料的成本通常很高,也因此 Merkle Tree 的設計往往成為擴容上的重點。

    我們知道 n 層的 Merkle Tree 可以存放 2**n 個葉子,以 Tornado Cash 的設計來說,他們設定 Merkle Tree 有 20 層,也就是一顆樹上會有 2**20 = 1048576 個葉子,而我們用一個 root 就代表了這 1048576 筆資料。

    接續上段的例子,這顆 20 層的 Merkle Tree 所產生的 Proof ,其路徑 (path) 要從最底下的葉子 hash 幾次才能到達頂端的 root 呢?答案就是跟一棵樹的 levels 一樣,我們要驗證 Proof 所要遞迴的次數就會是 20 次。

    在實作之前,我們先來看 MerkleTree 在 client 端是怎麼調用的,這有助於我們理解 Merkle Proofs 在做什麼。

    基本上一個 proof 的場景會有兩個人:prover 與 verifier。

    在給定一筆 leaves 的樹,必定產生一特定 root。prover 標示他的 leaf 在樹上的 index 等於 2,也就是 leaves[2] == 30,以此來產生一個 proof,這個 proof 的內容大致上會是這個樣子:

    對 verifier 來說,他要驗證這個 proof,就是用裡面的 leaf 去一個一個與 pathElements 的值做 hash,上述就是 H('30', 40) 後得出 node,再 hash 一次 H('19786...', node) 於是就能得出這棵樹的 root。

    重點來了,這麼做有什麼意義?它的巧思在於對 verifier 來說,他只需要儲存一個 root,由 prover 提交證明給他,經過計算後產生的 root 如果跟 verifier 儲存的 root 一樣,那就證明了 prover 所提供的資料確實存在於這個樹上。

    而 verifier 若不透過 proof ,要驗證某個 leaf 是否存在於樹上,也可以把 leaves = [10, 20 ,leaf ,40]整筆資料拿去做 MerkleTree 的演算法跑一趟也能產生特定的 root。

    但由 prover 先行計算後所提交的 proof,讓 verifier 不必儲存整批資料,也省去了大量的計算時間,即可做出某資料有無在 Merkle Tree 上的判斷。

    Sparse Merkle Tree

    上述能夠證明資料有無在樹上的 Merkle Proofs 是屬於標準的 Merkle Tree 的功能。但接下來我們要實作的是稍微不一樣的樹,叫做 Sparse Merkle Tree。

    Sparse Merkle Tree 的特色在於除了 proving inclusion 之外,還可以 proving non-inclusion。也就是能夠證明某筆資料不在某個 index,例如 H(A) 不在 index 2 ,這是一般 Merkle Tree 沒辦法做到的。

    而要做到 non-membership 的功能其實也不難,就是我們要在沒有資料的葉子裡補上 zero value,或是說 null 值。更多內容請參考:What’s a Sparse Merkle Tree。

    實作細節

    本節將完整的程式碼分成三個片段來解釋。

    首先,這裡使用的 Hash Function 是 MiMC,主要是為了之後在 ZKP 專案上的效率考量,你可以替換成其他較常見的 hash function 例如 node.js 內建 crypto 的 sha256:

    crypto.createHash("sha256").update(data.toString()).digest("hex");

    這裡定義簡單的 Merkle Tree 介面有 root, proof, and insert。

    首先我們必須先給定這顆樹的 levels,也就是樹的高度先決定好,樹所能容納的資料量也因此固定為 2**levels 筆資料,至於要不要有 defaultLeaves 則看創建 Merkle Tree 的 client 自行決定,如果有 defaultLeaves 的話,constructor 就會跑下方一大段計算,對 default 資料開始作 hash 去建立 Merkle Tree。

    如果沒有 defaultLeaves,我們的樹也不會是空白的,因為這是顆 Sparse Merkle Tree,這裡使用 zeroValue 作為沒有填上資料的值,zeros 陣列會儲存不同 level 所應該使用的 zero value。假設我們已經填上第 0 筆與第 1 筆資料,要填上第 2 筆資料時,第 2 筆資料就要跟 zeros[0] 做 hash,第 2 筆放左邊, zero value 放右邊。

    我們將所有的點不論是 leaf, node, root 都用標籤 (index) 標示,並以 key-value 的形式儲存在 storage 裡面。例如第 0 筆資料會是 0–0,第 1 筆會是 0–1,這兩個 hash 後的節點 (node) 會是 1–0。假設 levels 是 2,1–0 節點就要跟 1–1 節點做 hash,即可產出 root (2–0)。

    後半部份的重點在於 proof,先把 proof 和 traverse 看懂,基本上就算是打通任督二脈了,之後有興趣再看 insert 和 update。

    sibling 是指要和 current 一起 hashLeftRight 的值…也就是相鄰在兩旁的 leaf (or node)。

    到這裡程式碼的部分就結束了。

    最後,讓我們回到一開始 client 調用 merkleTree 的例子:

    以及 proof 的內容:

    前面略過了 proof 裡頭的 pathIndices,pathIndices 告訴你的是當前的 leaf (or node) 是要放在左邊,還是放在右邊,大概是這個樣子:

    if (indices == 0) hash(A, B);if (indices == 1) hash(B, A);

    有興趣的讀者可以實作 verify function 看看就會知道了!

    原始碼

    TypeScript from gist

    JavaScript from tornado-core

    參考

    Merkle Proofs Explained

    What’s a Sparse Merkle Tree?

    延伸:Verkle Tree

    Merkle Tree in JavaScript was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • null程式 在 奮game王紫楓 Youtube 的最佳解答

    2021-01-21 09:35:36

    #軟體工程師 #Kotlin
    👍歡迎訂閱!! 🔔🔔按下小鈴鐺,就可以一有新影片就搶先看!
    [軟體工程師雜談] 專業Android工程師來聊聊:Kotlin的10大優點

    0:00 開場
    0:51 紫楓自介
    1:39 Kotlin的10大優點

    1.完全相容於Java
    2.結尾不用分號
    3.好用的資料類別
    4.變數名稱支援與default
    5.IDE提供了良好的支援
    6.更清楚的呼叫方式
    7.No FXXKing Null exception
    8.更好的函式支援
    9.簡潔有力 (40% off)
    10.生產力提升

    Kotlin 實戰手冊: http://l.ovoy.click/vx3xj

    程式新手學習發問區,問都給問!!: https://www.facebook.com/groups/914880435669061

    紫楓FB專頁: https://www.facebook.com/tbpfs2/
    紫楓blog: https://tbpfs1.blogspot.com/
    紫楓linkedin: https://www.linkedin.com/in/tbpfs2
    斗內專線: https://pse.is/KUYMP

  • null程式 在 史九87 SJ87 Youtube 的精選貼文

    2020-03-18 20:30:15

    三個你不一定知道的小知識
    我想長資識有史以來最輕鬆的主題 😜

    👨‍💻 C 語言的由來 (C++ 為什麼叫做 C++, C# 又是什麼)
    👩‍💻 printf 的 f 到底是什麼意思?
    👨‍💻 為什麼寫程式的人都在那邊 hello world

    👉資訊相關👈
    ————————————————————————
    ● 面試祕笈!絕不藏私!軟體工程師的面試技巧 我想長資識 E03 https://youtu.be/UxmlFsQFqx4
    ● 2019 年最令人期待的手機? Pixel 4 曝光!來自 Google 的技術結晶 https://youtu.be/fppqZnZAZQM
    ● Null 不是唸「怒嘔」?工程師常常唸錯的單字 我想長資識 E02 https://youtu.be/1YEcEQw0vGA
    ● 韌體是什麼? 4分鐘!讓你認識軟體硬體與韌體 我想長資識 E01 https://youtu.be/ZHWsHUEz4qk
    ————————————————————————


    👉追蹤我們👈
    ————————————————————————
    史九87 IG ► https://www.instagram.com/im9vv
    史九87 FB ► https://www.facebook.com/shihjo87
    商業合作請洽詢 ► shihjo87@gmail.com

    信箱箱址中文:
    24199
    三重忠孝路郵局第 88 號信箱

    信箱箱址英文:
    P.O.BOX 88 Sanchong Zhongxiao Road
    New Taipei City 24199
    Taiwan (R.O.C)
    ————————————————————————

你可能也想看看

搜尋相關網站