Saladpuk.com
🏆 เนื้อหาหลัก
🏆 เนื้อหาหลัก
  • 💖สลัดผัก
  • 📰มีอะไรใหม่บ้าง
    • 2020
      • 2020-11
      • 2020-10
      • 2020-09
      • 2020-08
      • 2020-03
      • 2020-02
      • 2020-01
    • 2019
      • 2019-12
      • 2019-11
      • 2019-10
      • 2019-09
      • 2019-08
  • 🤔อ่านเรื่องไรดี ?
  • มือใหม่หัดเขียนโค้ด
    • 👶เขียนโค้ดด้วยภาษา C#
      • เกิดมาไม่เคยเขียนโค้ดมาก่อนเบย
      • 👶พื้นฐาน
        • 1.โปรแกรมที่ต้องลง
        • 2.โครงสร้างของโค้ด
        • 3.ชนิดของข้อมูล
        • 4.การสร้างตัวแปร
        • 5.คำสั่งพื้นฐาน
        • 6.การแปลงข้อมูล
        • 7.การเปรียบเทียบค่า
        • 8.การตัดสินใจด้วย IF statements
        • 9.การตัดสินใจด้วย Switch statements
        • 10.การทำงานซ้ำๆด้วย While
        • 11.การทำงานซ้ำๆด้วย Do While
        • 12.การทำงานซ้ำๆด้วย For
        • 13.การแก้โจทย์จากรูป
        • 14.มารู้จักกับ Array กัน
      • 🧑ระดับกลาง
        • 15.Value type vs Reference type
        • 16.ลดงานซ้ำๆด้วย Method
        • 17.มารู้จักกับ Class & Field กัน
        • 18.มารู้จักกับ Constructor กันบ้าง
        • 19.มาเขียน Method ใน Class กัน
        • 20.มารู้จักกับ Property กัน
        • 21.ลองใช้คลาสแบบจริงจังบ้าง
        • 22.การสืบทอด Inheritance
        • 23.Polymorphism
        • 24.Abstract Class
        • 25.Interface
        • 26.Namespace
        • 27.Enum
        • 28.Exception handler
        • 29.ลงลึกกับ string
        • 30.StringBuilder เพื่อนคู่ string
      • 👨⏳ระดับสูง
        • Generic
        • Delegates
        • Action & Func
        • Lambda expression
        • LINQ
        • พระคัมภีร์การใช้คำสั่ง LINQ
      • 💡Tips
        • 💡C# version 8.0
        • 💡Boxing & Unboxing
    • 👶Algorithm
      • 👾Algorithm Big-O
      • 👽Algorithm P & NP
    • 👦OOP
      • 💖Abstraction
      • 💖Encapsulation
      • 🏆Abstraction & Encapsulation
      • 💖Inheritance
      • 💖Polymorphism
      • 🏆Inheritance & Polymorphism
      • 📝ลองเขียน OOP ดูดิ๊
      • 👑OOP + Power of Design
      • 🥰เทคนิคในการออกแบบ
    • 👶บทสรุปฐานข้อมูล
      • เก็บรูปในฐานข้อมูล
      • Database indexing
      • การลบข้อมูล
    • 👦Communication Patterns
    • 👦Design Patterns
      • 🤰Creational Patterns
        • 🏭Factory Method
        • 🏭Abstract Factory
        • ☝️ Singleton Pattern
        • 🏗️ Builder Pattern
        • 🎎Prototype Pattern
      • 🧱Structural Patterns
        • 🔌Adapter Pattern
        • 📪Proxy Pattern
  • Puzzle
    • 🧠Challenges
      • 🐴Google ม้า 25 ตัว
      • 🌉Amazon เสา 2 ต้น
      • 🥇ทองเก๊
      • 💊ยาต้านโควิด
      • 🎩CP หมวก 5 ใบ
      • 🧓Einstein's Riddle 01
  • พื้นฐานที่ควรต้องรู้
    • 🐳Docker
      • 📦Docker Containers
      • 🃏Docker Exercise 01
      • 🛠️ Docker Tools
      • 🗃️ Docker Registry
      • 🖼️ Container Image
      • 📢Docker Push
      • 🔄WSL
    • 👶Clean Code
      • 🧓Uncle Bob - Clean Code
      • 🧓Uncle Bob - Comments
      • 🧓Uncle Bob - Naming
      • 🧓Uncle Bob - Mindset
      • 🧓Uncle Bob - TDD
    • 👶Code Smells
    • 👶สิ่งที่คนเขียนโค้ดมักเข้าใจผิด
    • 👶AI พื้นฐาน
    • 👶Git พื้นฐาน
      • Git branching strategy
    • 👶Cloud พื้นฐาน
    • 👶UML พื้นฐาน
      • Activity Diagram
      • Class Diagram
      • Sequence Diagram
      • Use case Diagram
      • บทสรุปการใช้ UML
    • 👶Data Scientist
      • การเลือก Algorithms ให้ AI (1/5)
      • การเตรียมข้อมูลให้ AI (2/5)
      • หลักการตั้งคำถามให้ AI (3/5)
      • แฉความลับของ AI Model (4/5)
      • หัดเขียน AI จาก AI ของคนอื่น (5/5)
    • 👶DevOps พื้นฐาน
    • 👶Docker ขั้นพื้นฐาน
      • Image and Container
      • แชร์ Docker Image ที่สร้างไว้
    • 👶Microservices พื้นฐาน
      • Microservices ที่ดีมีลักษณะยังไง
      • Microservices Tips
      • จาก Monolith สู่ Microservices
    • 👶ความรู้พื้นฐานในการทำเว็บ
    • 👦Bottlenecks of Software
      • หัวใจที่สำคัญที่สุดของฐานข้อมูล
    • 👦Agile Methodology
      • Agile in a Nutshell
      • Software Development Life Cycle
      • Code Review
    • 👦Security พื้นฐาน
      • การเก็บรหัสผ่านที่ถูกต้อง
      • Security in actions
        • Hash function
      • Security Principles
      • 😎The Matrix 1
      • 😎The Matrix 2
      • HTTPS in a nutshell
    • 👦SOLID Design Principles
      • มารู้จักกับ SOLID กันดีกว่า
      • Single-Responsibility Principle
      • Open/Closed Principle
      • Liskov Substitution Principle
      • Interface Segregation Principle
      • Dependency-Inversion Principle
  • Cloud Computing
    • 👶Microsoft Azure 101
      • สมัคร Microsoft Azure
      • รู้จักกับ Resource Groups
      • สร้างเว็บตัวแรกกัน
      • สร้าง Virtual Machine กัน
      • ประเภทของคลาว์เซอร์วิส
      • มาสร้าง Logic App กัน
      • มาสร้าง Function App กัน
      • คลาว์คิดเงินยังไง ?
      • Cloud Native
      • Guideline for Cloud scaling
      • Auto Scaling
    • 👶Azure App Services
    • 👶App Service Plan
    • 👶Azure Storage
      • Blob storage
        • ลองสร้างที่เก็บไฟล์กันเลย
        • เข้าใจ Blob storage ให้มากขึ้น
        • ลองเขียนโค้ดอัพโหลดไฟล์กันบ้าง
        • สร้างเว็บจากที่ฝากไฟล์บนคลาว์
    • 👶Azure Bot Service
      • Bot เข้าใจเราได้ยังไงกันนะ
    • 👶Azure Cognitive Services
      • การสร้าง Cognitive Services
      • การ Login ด้วยใบหน้า
      • อ่านลายมือจากรูปเป็นตัวอักษร (OCR)
      • เขียน AI แยกของต่างๆทำยังไง?
      • เขียนแอพ ทายอายุ บอกเพศ ง่ายจิ๊ดเดียว
      • เขียนแอพให้ AI อธิบายรูปเป็นภาษาคน
    • 👶Machine Learning Studio
      • มาสร้าง AI ของแท้ตัวแรกของเรากัน
      • สร้าง AI ตัดสินใจอนุมัติบัตรเครดิต 💳
      • ลองเรียกใช้ AI ของเรากัน
    • 👶Azure Service Fabric
      • สร้าง Service Fabric กัน
    • 👶Blockchain
      • Blockchain ทำงานยังไง ?
      • Consensus Algorithm คืออะไร ?
      • สร้าง Blockchain ใช้เองกัน !
      • หัดเขียน Smart Contract กัน
    • 👶Power BI
    • 👶Azure Web App
      • เซิฟเวอร์บนคลาว์ ราคา? ต่าง?
    • 👶Azure DevOps
      • เล่น Azure DevOps กัน
      • เล่นกับ Repository
      • ลองทำ Continuous Integration (CI)
      • ลองทำ Continuous Delivery (CD)
      • เล่น Kanban Board
    • 🤠Cloud Playground
      • การป้องกันความลับหลุดตอนที่ 1
      • การป้องกันความลับหลุดตอนที่ 2
      • การป้องกันความลับหลุดตอนที่ 3
      • การป้องกันความลับหลุดตอนจบ
  • Software Testing
    • 👦Test-First Design
    • 👦Test-Driven Development
      • 1.มารู้จักกับ TDD กันดีกว่า
      • 2.Test cases เขาเขียนกันยังไงนะ
      • 3.เครื่องมือในการทดสอบ
      • 4.การใช้ Theory และ InlineData
      • 5.โค้ดที่ทดสอบได้
      • 6.Mantra of TDD
      • 7.Functional & None-Functional testing
      • 8.Manual vs Automation testing
      • 9.Automation Frameworks in .NET
      • 10.Mock Framework
      • 11.มาเรียนการใช้ Moq กันเถอะ
      • 12.สรุป
  • Web
    • 👦Web API
      • 1.Web API คืออะไร
      • 2.ติดตั้ง .NET Core SDK
      • 3.สร้าง Web API ตัวแรกกัน
      • 4.Verbs
      • 5.Swagger เพื่อคู่ API
      • 6.การใช้ Model
      • 7.เรียก Web API ผ่าน Postman
      • 8.มาจัดกลุ่ม API กัน (1/2)
      • 9.มาจัดกลุ่ม API กัน (2/2)
  • Software Design
    • 🤴Design Patterns
      • 🦈Creational patterns
        • Abstract Factory
        • Builder
        • Factory Method
        • Prototype
        • Singleton
      • 🦈Structural patterns
        • Adapter
        • Bridge
        • Decorator
        • Facade
        • Proxy
      • 🦈Behavioral patterns
        • Chain of Responsibility
        • Command
        • Iterator
        • Mediator
        • Memento
        • Observer
        • State
        • Strategy
        • Template Method
        • Visitor
Powered by GitBook
On this page
  • 🦉 นิทานเรื่องแรก
  • 💔 จดหมายโดนแอบอ่าน
  • 💔 จดหมายถูกแก้ไข
  • 💔 จดหมายปลอม
  • 🎯 บทสรุป
  • 🔥 Encryption & Description
  • 🔥 HASH
  • 🔥 รวมๆ

Was this helpful?

Export as PDF
  1. พื้นฐานที่ควรต้องรู้

Security พื้นฐาน

เรื่องไม่ลับแต่คนส่วนใหญ่ไม่รู้กับหลักการทำ security

PreviousCode ReviewNextการเก็บรหัสผ่านที่ถูกต้อง

Last updated 5 years ago

Was this helpful?

ในคอร์สนี้เราจะมาพูดกันถึงเรื่อง Security ขั้นพื้นฐานในการทำซอฟต์แวร์ โดยเนื้อหาจะเน้นไปที่เรื่องความเข้าใจและหลักในการปฏิบัตินะจ๊ะ

🦉 นิทานเรื่องแรก

ในสมัยที่มองโกลเริ่มไล่ทำสงครามยึดอาณาจักรต่างๆอยู่นั้น เจงกีสข่าน ผู้นำฝั่งมองโกลต้องคอยคุมกองทัพนับล้านๆคน เพื่อออกคำสั่งว่าทัพไหนต้องไปยึดเมืองไหน ต้องเจอกันเมื่อไหร่ ต้องทำยังไงบ้าง ซึ่งแม่ทัพของเขากระจายอยู่ทั่วอาณาจักร ทำให้ต้องเขียนจดหมายเพื่อออกคำสั่ง โดยแต่ละครั้งจะส่งผ่านม้าเร็วไปให้แม่ทัพนั่นเอง

ปัญหาของเรื่องมีอยู่ว่า

  • ม้าเร็วอาจจะถูกฝ่ายศตรูดักโจมตีเพื่อ แอบอ่านจดหมาย นั้นก็ได้ ซึ่งจะทำให้ฝ่ายศตรูได้เปรียบเพราะจะได้หาทางรับมือกับทางเจงกีสข่านได้นั่นเอง

  • ฝ่ายแม่ทัพจะรู้ได้ยังไงว่า ข้อความนั้นเป็นของจริง ที่ท่านเจงกีสข่านเขียนมาให้ ไม่ใช่ฝ่ายศตรูแอบปลอมแปลงมา หรือ โดนไส้ศึกทำของปลอมส่งมาให้

  • ถ้าแม่ทัพต้องเขียนจดหมายรายงานกลับมา เจงกีสข่านจะรู้ได้ยังไงว่า จดหมายนั้นเป็นของแม่ทัพจริงๆ

จากปัญหาที่ว่ามา เจงกีสข่าน ก็เลยไปศึกษาเรื่อง Cryptography 101 เลยได้วิธีการแก้ปัญหาทั้งหมดออกมาเป็นแบบนี้

💔 จดหมายโดนแอบอ่าน

เจงกีสข่านได้รู้ดีว่า เราไม่สามารถป้องกันเรื่องการถูกแอบอ่านได้ ดังนั้นถ้าแก้ที่ต้นเหตุไม่ได้ เราก็ต้องแก้ที่ปลายเหตุนั่นก็คือ ทำให้จดหมายมันเปิดอ่านไม่ได้นอกจากคนที่มีกุญแจนั่นเอง โดยเจงกีสข่านจะมอบกุญแจพิเศษให้กับเหล่าแม่ทัพของเขา เอาไว้เปิดอ่านข้อความในจดหมายได้เท่านั้นยังไงล่ะ

เราเรียกหลักการนี้ว่าการทำ Encryption โดยเราจะเอาข้อความต้นฉบับที่อ่านได้ หรือที่เรียกว่า Plain Text ไปทำการเข้ารหัสด้วย กุญแจลับ แล้วสิ่งที่ได้ก็คือข้อความที่อ่านไม่ออก หรือที่เรียกว่า Chipher Text นั่นเอง ตามรูปเลย

เช่น เจงกีสข่าน เขียนจดหมายไปว่า เจอกันที่ใต้เข้าเหลียงซาน เขาก็จะเอาข้อความที่เป็น Plain Text นี้ไปเข้ารหัสด้วยกุญแจลับ แล้วก็จะได้ Cipher Text ออกมาเป็นข้อความที่อ่านไม่ออกตามด้านล่างนี้

Tj/qsc0XaalXwMhfWWDFfC9kHlGNA/YQhTXDbu3jEC7jROmPKSNzhcRJTQtmQuTbqdosWtEK83XJhBO8cekh7YJiacffeMu7b+bEyvE+wlE=

ถัดมาฝั่งแม่ทัพพอได้จดหมายมาแล้ว เขาก็จะทำการเอาจดหมายที่มีข้อความมั่วๆนี้มาทำการถอดรหัสด้วยกุญแจลับที่เจงกีสข่านมอบให้ไว้ เพื่อให้ได้ข้อความที่เจงกีสข่านเขียนไว้นั่นเอง โดยหลักการนี้เราเรียกว่า Decryption นั่นเอง ตามรูปเลย

เทียบกับโลกจริง การป้องกันการถูกแอบอ่านจดหมายนั้นมีไว้เพื่อป้องกันไม่ให้ มีคนแอบมารู้รหัสลับต่างๆที่เราส่งผ่าน network/internet ยังไงล่ะ เช่น เวลาเราใส่รหัสผ่าน ข้อมูลบัตรเครดิต อะไรพวกนี้ยังไงล่ะ ซึ่งนอกจากการป้องกันโดยการใช้ encryption ต่างๆแล้ว ช่องทางในการรับส่งข้อมูลก็ต้องเป็นช่องทางพิเศษด้วยนะ เช่น สังเกตุดีๆเวลาที่เราจะใส่รหัสผ่านกับเว็บอะไรก็ตาม มันจะต้องอยู่บน HTTPS ด้วย เพราะนั่นคือ secure channel ยังไงล่ะ แต่ถ้าเว็บไหนตอนที่เราใส่ความลับนั้นไม่ได้อยู่บน HTTPS ให้โปรดรู้ไว้เลยว่า คุณอาจจะโดนดักความลับอยู่ก็เป็นได้

💔 จดหมายถูกแก้ไข

เจงกีสข่านจำได้ว่าตอนไปกู้เงินโดนคนอื่นแอบโกงโดยการเติมเลขศูนย์ต่อท้ายลงไป ทำให้ต่อมาเขาต้องเขียนกำกับลงไปเป็นข้อความด้วยว่าเขากู้เงินไปจริงๆเท่าไหร่ เช่น 200 (สองร้อยบาทถ้วน) เพื่อเป็นการเอาไว้ตรวจสอบ ตอนที่มีคนไปแอบแก้เลข 200 เป็น 20,000 ก็จะไม่มีผลเพราะมันเขียนไว้แล้วว่า สองร้อยบาทถ้วน ดังนั้นเจงกีสข่านเลยเอาหลักการที่ว่ามาใช้นั้นก็คือการทำให้ ข้อความสามารถถูกตรวจสอบได้ นั่นเอง โดยหลักการนี้เราเรียกมันว่าการทำ HASH นั่นเอง

ดังนั้นในจดหมายที่ส่งไป มันจะมีของที่สามารถตรวจสอบเจ้าจดหมายได้ว่ามันถูกแก้ไขหรือเปล่า ซึ่งถ้ามันถูกแก้ไข ผลตรวจก็จะบอกว่าจดหมายนั้นถูกแก้ไขนั่นเอง (รายละเอียดอ่านด้านล่างต่อ)

หลักการ HASH function นั้นแสนจะเรียบง่าย นั่นคือ การเอาข้อความธรรมดา ไปผ่านกระบวนการ hash แล้วเราจะได้ ข้อความอีกแบบกลับมานั่นเอง

เช่น เอาข้อความว่า saladpuk ไปผ่าน hash function เราก็จะได้ผลลัพท์ประมาณนี้ออกมา

6e1033fe5939f2659d21a51b27a41a14

และการทำ hash มันจะมีเรื่องพิเศษของมันคือ

1.ผลลัพท์เดิมเสมอ ถ้าเอาข้อความเดิมไปผ่านการ hash ไม่ว่าจะทำกี่ที ก็จะได้ผลลัพท์เดิมเสมอ เช่นคำว่า saladpuk **ไม่ว่ายังไงเราก็จะได้ผลลัพท์กลับมาเป็นตัวด้านล่างอยู่ดี

6e1033fe5939f2659d21a51b27a41a14

แต่ถ้าเอาคำว่า Saladpuk (ตัวแรกเป็นตัว S ใหญ่) ไปผ่าน hash function ผลลัพท์ที่ได้กลับมาจะเป็นคนละโลกกันเลย

fce7659c775781e2e3b979799e0ee0d6

2.อาจะได้ผลลัพท์เดียวกัน ข้อความต่างกันอาจจะได้ผลลัพท์เดียวกันก็ได้ เช่น เอาคำว่า Helloworld ไปผ่านการ hash อาจจะได้ผลลัพท์เดียวกับ การเอาคำว่า saladpuk ไป hash ก็ได้ (เป็นแค่ตัวอย่างนะ)

3.ไม่สามารถทำ reverse engineer ได้ เราไม่สามารถเอาผลลัพท์กลับมาหาว่า ข้อความก่อน hash คืออะไรได้เลย

4.ขนาดตายตัว ไม่ว่าข้อความจะยาวแค่ไหนก็ตาม ผลลัพท์ที่ได้จากการ hash จะมีความยาวเท่ากันเสมอ เช่นเอาคำว่า demo hash function with a long long message ไปผ่าน hash function ผลลัพท์ที่ได้ก็จะยาวเท่ากับตัวอย่างแรกเสมอ

ab9003e1e895c62ab2c73f9f550a5275

จากที่ว่ามาทั้ง 4 ข้อเราก็สรุปออกมาเป็นภาพได้ราวๆนี้

💔 จดหมายปลอม

เพื่อป้องกันการปลอมแปลงเอกสาร เจงกิสข่านเลยให้แม่ทัพของเขาลงตราประทัพประจำกองทัพเอาไว้ ดังนั้นถ้าจดหมายนั้นมีตราประทับอยู่ก็น่าจะเป็นจดหมายจากแม่ทัพของเขาจริงๆยังไงล่ะ ซึ่งการทำแบบนี้เขาเรียกว่าการทำ Digital Signature

โดยหลักในการทำ Digital Signature นั้นจะใช้หลักการที่เล่าให้ฟังทั้ง 2 เรื่องคือ Encryption & Description และ HASH มาร่วมกันทำ Digital Signature นั่นเอง

แต่ในรอบนี้การเข้ารหัสจะทำการสร้างกุญแจออกมา 2 ดอก เราเรียกมันว่า กุญแจคู่ เพราะเจ้ากุญแจทั้งสองอันนี้มันเกิดมาคู่กัน ไม่สามารถหากุญแจอันไหนมาแทนที่ได้นั่นเอง โดยลักษณะพิเศษของมันคือ ถ้าเอากุญแจอันนึงไปเข้ารหัสข้อความเสร็จแล้ว เกิดอยากถอดรหัสขึ้นมาจะต้องใช้กุญแจอีกดอกถอดรหัสเท่านั้น นั่นคือสาเหตุว่าทำไมมันถึงเรียกมันว่ากุญแจคู่นั่นเอง โดยเราเรียกกุญแจแบบนี้ว่า Public-Key Cryptography โดยคนสร้างกุญแจจะเก็บมันไว้กับตัว 1 ดอกซึ่งเราเรียกมันว่า Private Key เพราะคนสร้างจะเก็บมันไว้อย่างดีไม่ให้ใครนั่นเอง ส่วนอีกดอก เราเรียกว่า Public Key ซึ่งเขาจะมอบให้กับคนอื่นเพื่อเอาไว้เปิดอ่านข้อความของเขา ซึ่งถ้าข้อความนั้นถูกเปิดด้วย public key ของเขาได้ นั่นแสดงว่าคนที่เขียนคือเจ้าตัวแน่นอนนั่นเอง

โดยหลักการทำงานของฝั่งที่จะเขียนจดหมายลับจะต้องทำตามในรูปนี้

อธิบายรูป

  1. ฝ่ายผู้สร้างเขียนจดหมายจะต้องนำข้อความในจดหมายไปผ่าน HASH function เสียก่อน เพื่อให้สามารถตรวจสอบได้ว่าข้อความจะต้องเป็นแบบนี้เท่านั้นนะ เพราะถ้าข้อความถูกแก้ไข มันจะทำให้ผลลัพท์ของ hash เปลี่ยนไปนั่นเอง

  2. ทำการเข้ารหัสด้วย Private Key เพื่อไม่ให้คนอื่นอ่านออก และเป็นการยืนยันว่าคนที่ส่งเกิดจากคนที่ใช้ private key นี้เท่านั้น ซึ่งมันก็เหมือนกับเป็นการลงลายเซ็นไปในตัว เพราะถ้าจะเปิดอ่านจะต้องใช้ public key ของเขาเท่านั้น ดังนั้นผลลัพท์ที่ได้จะเป็น ข้อความ และ สิ่งที่ตรวจสอบข้อความได้ว่ามันถูกแก้ไขหรือเปล่านั่นเอง

ถัดมาฝั่งที่รับจดหมายก็จะทำการตรวจสอบ ตามขั้นตอนในรูปด้านล่างนี้

อธิบายรูป

  1. ผู้รับจดหมายก็จะเอาจดหมายไปทำการถอดรหัสด้วย Public key ที่คนเขียนได้ส่งมอบให้ ซึ่งถ้าใช้กุญแจนี้เปิดได้ก็แสดงว่าคนส่งคือคนที่ใช้ private key คู่ตรงข้ามของมันเท่านั้น ส่วนผลลัพท์จากการถอดรหัสจะได้ข้อความและผลลัพท์ของการ hash ออกมา

  2. ผู้รับจดหมายก็จะลองเอาข้อความที่ได้ไปทำการ hash ซ้ำอีกครั้ง เพื่อดูผลลัพท์จากการ hash ว่าตรงกับ hash ที่อยู่ในจดหมายหรือเปล่า ซึ่งถ้าตรงกันก็แสดงว่าจดหมายไม่ได้ถูกแก้ไข และ มาจากคนส่งที่ถูกต้องจริงๆนั่นเอง

🎯 บทสรุป

🔥 Encryption & Description

เป็นการเข้ารหัสและถอดรหัส เพื่อป้องกันไม่ให้คนอื่นรู้ข้อความว่าเรากำลังคุยอะไรกันอยู่ ซึ่งเจ้าตัวนี้ก็จะแตกย่อยออกเป็นหลายๆแบบเลย เช่น Symmetric Encryption หรือ Asymmetric Cryptography ซึ่งรายละเอียดลองไปศึกษาดูต่อกับแต่ละภาษาที่ถนัดเอาละกันนะ

🔥 HASH

เป็นการแปลงข้อความตัวนึงให้กลายเป็นอีกตัวนึง โดยมีหลายวิธีการเช่นกัน เช่น MAC ก็จะเป็นตระกูล MD5, SHA1 หรือพวก HMAC ก็จะเป็นตระกูล HMAC-256, SHA-2, SHA-3 ไรงี้

ข้อควรระวัง ในเรื่องการทำ Security นั้นจะมีการอัพเดทมาเป็นระยะๆว่า algorithm แบบไหนที่ไม่ควรใช้แล้ว เช่น MD5, SHA-1 ไรงี้เราไม่ควรใช้แล้วนะครับ เพราะมันมีคนทำ map table ไว้จนหมดแล้ว ถ้าแค่เค้าเห็นผลลัพท์เขาก็จะรู้ข้อความลับของเราได้เลยโดยที่ไม่ต้องไปถอดรหัสอะไรเลย (ใช้เวลาไม่ถึงวิ) ก็แทบจะเรียกว่าเราเก็บ plain text ไว้เลยก็ว่า

🔥 รวมๆ

จะเห็นว่าหลักการพื้นฐานของการทำ Security เริ่มต้นนั้นไม่ได้ยากเลย แค่เรารู้หลัก 2 เรื่องนั่นคือการเข้าหรัส การถอดรหัส และ การทำ HASH เพียงเท่านี้เราก็จะสามารถมีลูกเล่นหลายๆอย่างเอาไปประกอบกันได้เยอะแล้ว ซึ่งในบทถัดไปเราจะลองเอาหลักการพวกนี้มาลองเล่นกับการเก็บ Password กันดูบ้าง ซึ่งเชื่อไหมว่าในการทำระบบพวกนี้ในบ้านเราทำผิดพลาดกันแบบไม่น่าให้อภัยกันเยอะเลยทีเดียว

แนะนำให้อ่าน สำหรับสาย .NET Developer แนะนำให้อ่านเรื่อง Cryptography จากทาง Microsoft โดยตรงได้เลยครับจากลิงค์ด้านล่างนี้

👦
Microsoft document - Cryptography models