📌 จากประเด็นในโพสต์ก่อนหน้าที่แนะนำ MD5 แอดขอเปลี่ยนมาเป็นหัวข้อนี้ดีกว่า ! กับเรื่อง MD5 ที่จริง ๆ แล้ว ตามตำราที่ว่าไว้ ไม่ว่าจะเป็นการ hash ทางเดียว แงะ ออกกันไม่ได้ มันคือตัวเลือกที่ปลอดภัยที่สุดจริง ๆ ไหมนะ !?
.
แน่นอนฮะ มันไม่ใช่เรื่องผิด ถ้าเราทำเว็บเมื่อสมัยก่อน และ MD5 มันก็มีประโยชน์ในตัวมันเอง ทั้งในเรื่องของการเช็คว่าไฟล์ ๆ นั้น คือต้นฉบับไม่ถูกการแก้ไขไหม ? และ หลายคนรวมถึงตอนนี้ก็เอามาใช้ในการทำการเข้ารหัสใน Database
.
🔥 อะ เข้าเรื่อง .. "การทำการใช้เทคนิคนี้เก็บข้อมูลในระบบปลอดภัยจริง ๆ ไหม ?"
.
คำตอบคือ "อ่ะ ใช่แหละ คนทั่วไปอ่านไม่ออก แงะกลับมาไม่ได้ มันก็ปลอดภัยหนะสิ" ใช่ครับ แต่มันจะปลอดภัยแค่ชั่วครู่เท่านั้น และ จะไม่ได้ปลอดภัยกับทุกรหัสผ่านที่มีในระบบ
.
หนึ่ง Concept ที่เราจะเข้าใจเรื่องนี้เราจะต้องเข้าใจวิธีการทำงานของมันก่อน อันดับแรก คือ สมมุติว่าเราพิมพ์ข้อมูล AAA ทำการผ่านฟังก์ชัน MD5 เราจะได้ข้อมูลยาว ๆ ชุดนึงมา ("e1faffb3e614e6c2fba74296962386b7")
.
✅ แน่นอนว่า อีกสิบวัน สิบปี เราเอาข้อมูล AAA ตัวนี้เข้าฟังก์ชันนี้ มันก็จะได้ค่า ๆ เดิมออกมานั่นเอง
.
ซึ่งเวลาเราจะดำเนินการตรวจสอบว่า Username และ Password ที่เก็บไว้ใน Database ตรงกับที่พิมพ์ไหม เราก็ใช้ตรง ๆ คือ ดูว่าเอ่อ User ชื่อนี้ และ รหัสผ่านเป็น AAA ที่เราเอาไปเข้า MD5 ไหม ถ้าตรงก็คือจบ
.
อ้าว .. ก็ดูปกติใช่ไหมครับ มาถึงตรงนี้ แต่ก็ต้องบอกว่า ตรงนี้ก็เป็นจุดอ่อนของการใช้ MD5 เพียว ๆ เช่นกัน เพราะว่า ถ้าเรารู้ว่า ข้อความที่ถูกเข้าผ่านฟังก์ชันนี้แล้วให้ผลลัพธ์ว่า e1faffb3e614e6c2fba74296962386b7 มันคือข้อความว่า AAA นะ
.
😱 "วันหลังที่เราเห็น ข้อความชุดเดียวกันอีก เราก็จะสามารถย้อนดูรหัสผ่านจริง ๆ ได้ ซึ่ง ความพังของมันคือ ถ้าเรารู้อีเมล หรือ username เขาแล้วรู้รหัสต้นฉบับ เราอาจจะนำรหัสนี้ไปใช้ทำอะไรก็ได้ !!"
.
และ แน่นอนว่าคนที่มีความสามารถ หรือ เข้าถึงข้อมูลพวกนี้ได้เขาก็ไม่ได้กด Ctrl + F หารหัสเอาแน่ ๆ เพราะเขาก็แค่ทำการไล่เข้ารหัสไปเรื่อย ๆ เพื่อสร้าง Table หรือ ตารางชุดคำตอบของ MD5 ที่นำไปเข้ารหัสนั่นเอง
.
แค่นี้เราก็จะรู้ได้ว่า ข้อมูลต้นฉบับหลัง MD5 เป็นยังไงนั่นเองฮะ !! แม้ว่าเทคนิคนี้จะใช้เวลานานกับ รหัสประหลาด ๆ ตัวอักษรผสมเยอะ ๆ มีตัวอักษรพิเศษมีอะไรปน แต่มันก็ใช่ว่าจะแกะไม่ได้อยู่ดี 🤣
.
🔥 ซึ่งปัจจุบันมีแหล่งอ้างอิงตอนปี 2012 บอกมาว่า หลังจากข้อมูลของ Hash ที่อยู่ใน Database หลุดไปไม่เกิน 3 วัน กว่า 90% ของรหัสผ่านในนั้นถูกแงะแปลงกลับได้จนหมดเลย ! (แอดทิ้งลิงก์ไว้ข้างล่างนะ)
.
ดังนั้นแล้ว มาถึงตอนนี้ ถามว่าเอ่อ เลิกใช้ไปเลยดีไหม ? เอาจริง ๆ มันใช้ได้อยู่ และ ใช้ได้ดีมากกกก สำหรับการตรวจสอบไฟล์นะ ว่าเอ่อ ไฟล์นี้ต้นฉบับจริง ๆ ไหม ?
.
เพราะหลักการเดียวกับรหัสผ่านที่แอดพูดถึงก่อนหน้า ที่เขาจะนำข้อมูลมาเข้าจนได้ Data ชุดนึงมา ถ้ามันตรงกันก็คือต้นฉบับแน่นอน
.
⭐ แต่สำหรับใครที่อยากเอาไปใช้กับ Password ในปัจจุบันก็มีอีกหลายเทคนิคที่น่าสนใจ ใครอยากตามก็ตามมาที่นี่ได้เลยคร้าบ >> https://www.vaadata.com/blog/how-to-securely-store-passwords-in-database/
.
✌ //ref สำหรับ รหัสผ่านที่ถูกแงะในปี 2012 อยู่ในนี้นะคร้าบ >> https://www.lefigaro.fr/secteur/high-tech/2016/05/18/32001-20160518ARTFIG00292-plus-de-100-millions-de-mots-de-passe-linkedin-dans-la-nature.php
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
「password hash」的推薦目錄:
- 關於password hash 在 BorntoDev Facebook 的最佳解答
- 關於password hash 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳貼文
- 關於password hash 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於password hash 在 How to use PHP's password_hash to hash and verify passwords 的評價
- 關於password hash 在 Password Storage Cheat Sheet - GitHub 的評價
- 關於password hash 在 Is it safe to publish the hash of my passwords? - Information ... 的評價
password hash 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳貼文
#โปรแกรมเมอร์ ถ้าไม่อยากโดนแฮกเกอร์โดนลูบคม
ต้องโค้ดดิ้งแบบไหนให้ปลอดภัย
.
☑ โค้ดดิ้งรก ไม่สะอาด มีกลิ่นเหม็น -> ยังบอกลูกค้าว่าทำ refactoring ได้ และ test ซ้ำได้
☑ ระบบช้า อืดอาด ไม่ดี -> ยังบอกลูกค้าว่า เดี๋ยวไปปรับจูนภายหลังได้
☑ ระบบล่ม -> ลูกค้าด่า ยังพอแก้ตัว กู้กลับมาได้
☑ แต่ระบบโดยเจาะ หรือโจมตี หรือข้อมูลรั่วไหล -> จะเป็นข่าวดังทันที จึงเป็นเรื่องสำคัญ ไม่ค่อยมีเพจไหนเล่าเท่าไร
.
อันนี้เป็นบทความสั้นๆ ที่เพจรวบรวมเกี่ยวกับความปลอดภัยในการโคดดิ้ง เขียนมาเรื่อยๆ ตามเวลาว่างจะอำนาย
.
1) เรื่อง access token
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2194298974193275
.
.
2) ใช้ hash function + salt value ในการเก็บ password
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2185533601736479
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2804799459809887
.
.
3) การโจมตีด้วย command injection
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2188420494781123
.
.
4) ช่องโหว่จากการอัพโหลดไฟล์
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2196560377300468
.
5) ช่องโหว่ในการเปรียบเทียบ
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2199532440336595
.
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2689348554688312
.
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2804996869790146
.
.
6) การโจมตีแบบ Cross Site Scripting (XSS)
https://www.facebook.com/programmerthai/photos/a.2185538375069335/2804958156460684
.
.
7) ปัญหา Buffer overflow
https://www.facebook.com/programmerthai/posts/2560601167563052
.
.
จริงๆ ยังมีอีกหลายเรื่องอยากเล่า เกี่ยวกับการโจมตีโค้ดของเหล่า hacker
เช่น การโจทย์ตีแบบ SQL Injection, การโจมตีแบบ CSRF , การฝั่งโค้ดประสงค์ร้ายในรูปภาพ และให้มันไปประมวลผลฝั่ง server ฯลฯ
วันนี้พอแค่นี้วันหลังเดี๋ยวมาเล่าใหม่
.
.
.
.
.
.
.
.
.
<ประชาสัมพันธ์ ขายหนังสือ/>
“โปรแกรมเมอร์ก็รวยได้ ด้วยเส้นทางเอาท์ซอร์สสายดำ”
ความยาว 170 กว่าหน้ากระดาษ A5 (≈ 41,002 คำ)
แบ่งเป็น 2 เวอร์ชั่น
.
👉 1) เวอร์ชั่นเล่มกระดาษจริง
เนื้อในเป็นขาวดำนะ ราคา 350 ฿
ติดต่อสั่งซื้อได้ที่ไลน์ @269aibvq
จำนวนเล่มมีจำกัดพิมพ์มาน้อย มากกกก ก ล้านตัว
.
👉 2) เวอร์ชั่นอีบุ๊กอ่านผ่านโปรแกรมของเว็บ mebmarket
เนื้อในเป็นสีสัน ไม่มีแจก PDF ปรินต์ออกมาไม่ได้
ราคาถูกลงมาหน่อย 250 บาท ฿
กับ 279 บาท ฿ (ซื้อผ่านระบบ Apple)
ซื้อได้ที่ 👇
https://www.mebmarket.com/web/index.php?action=BookDetails&data=YToyOntzOjc6InVzZXJfaWQiO3M6NzoiMTcyNTQ4MyI7czo3OiJib29rX2lkIjtzOjY6IjEzMTQxMiI7fQ
.
สำหรับตัวอย่างหนังสือ ดาวน์โหลดได้ตามลิงก์ข้างล่าง 👇
https://drive.google.com/open?id=1tAnMozeYd63dcbBGTQmT_ZrpSaamZS3e
.
✍ เขียนโดย โปรแกรมเมอร์ไทย thai programmer
password hash 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
#โปรแกรมเมอร์ เก็บ Password แบบไหน? ถึงจะปลอดภัย
ในทางโปรแกรมมิ่งการเก็บ password ลงฐานข้อมูล (Database) ไม่ได้เก็บกันตรงโต้งๆ ไม่งั้นใครมาเห็นก็อ่านได้หมด ซวยกันพอดี
:
วิธีเก็บ password ที่ปลอดภัย
จะนำมาผ่าน Hash function เสียก่อน เช่น
hash("1234") ได้คำตอบออกมาเป็น
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9
:
หน้าที่ hash function จะแปลงพาสเวิร์ด "1234"
เป็นข้อความลับอะไรซักอย่างที่อ่านไม่ออก
ทั้งนี้ขนาดข้อความที่ได้จาก hash function จะคงที่ (fixed size)
:
สำหรับค่าที่ได้จาก Hash function มีหลายชื่อให้เรียกขาน เช่น
hash values, hash codes, digests
แต่ผมจะเรียกสั้นๆ ว่า "ค่า hash" แล้วกัน
:
ส่วนฟังก์ชั่นที่ใช้เป็น Hash function ในโลกนี้มีหลายตัว เช่น
MD5, SHA256, SHA512, RipeMD, WHIRLPOOL เป็นต้น
:
+++++
👉 ตัดกลับมาตอนนี้เราเก็บ password ในฐานข้อมูลเป็นค่า hash แล้วเวลายูสเซอร์ล็อกอินกรอก user name ป้อน password เข้ามาในระบบ
.
ก็จะมีสเตปการตรวจสอบ password ประมาณเนี่ย
.
1) ระบบจะเอา password มาเข้า hash funcion ได้เป็นค่า hash
2) เอาค่า hash ในข้อ 1 ไปเทียบดูในฐานข้อมูล (ของยูสเซอร์นั้น)
3) ถ้าค่าตรงกันแสดงว่ายูสเซอร์ป้อน password ได้ถูกต้อง แสดงว่าล็อกอินสำเร็จ
:
👉 เหตุผลที่ hash function มัน ok เพราะอาศัยคุณสมบัติดังนี้
1) hash function มันทำงานทางเดียว (one-way)
หมายถึงเราไม่สามารถนำค่า hash มาย้อนหาข้อความต้นฉบับได้เลย
.
ในกรณีนี้ต่อให้ hacker เห็นค่า hash เขาจะไม่สามารถถอดกลับ
มาเป็น "1234" ได้เลย
.
ด้วยเหตุนี้ค่า hash บางทีเขาจึงเรียกว่า "message digest" หมายถึง "ข้อความที่ย่อยสลาย" ...จนไม่รู้ต้นฉบับหน้าตาเป็นแบบไหนแล้ว
:
2) ถ้าข้อความต้นฉบับหน้าตาเดียวกันเป๊ะทุกกะเบียดนิ้ว
เวลาผ่าน hash function จะได้ค่า hash เหมือนเดิม
พอเปลี่ยนข้อความต้นฉบับนิดหนึ่ง
แม่เจ้า ....ค่า hash เปลี่ยนไปราวฟ้ากับเหว ต่างกันมาก
.
จึงเป็นไปไม่ได้ที่เราจะเก็บ password ต่างกัน
แล้วได้ค่า hash เดียวกัน ...เป็นไปไม่ด้ายยยย
(ไม่มีการชนกันหรือ crash)
:
+++++
👉 เพราะข้อดีของ hash function ที่ยกมา
เวลาเก็บ password ลงฐานข้อมูล จึงควรเปลี่ยนไปใช้ค่า hash แทน
.
รับรองได้ว่าต่อให้ hacker เจาะระบบเข้ามาได้ (กรณีเลวร้ายสุดๆ แหละ)
...แล้วอ่าน password ที่ถูกเข้ารหัส ก็จะอ่านไม่รู้เรื่อง
...ต่อให้พยายามถอดกลับมาเป็นข้อความต้นฉบับ ก็ทำไม่ได้นะจ๊ะ
:
ฟังเหมือนปลอดภัยนะ ถ้าเก็บรักษา password ด้วยวิธี hash function แต่ทว่า hacker ก็ยังสามารถใช้วิธีเดาสุ่มหา password ได้อยู่ดี ...ไม่ยากด้วย ขอบอกเลย
:
👉 ยกตัวอย่างง่ายๆ วิธี hack พาสเวิร์ดเบสิกสุดๆ
- ให้คิดว่าตอนนี้ hacker เจาะระบบเข้าไปอ่าน password ในฐานข้อมูลได้แล้ว
- จากนั้น hacker จะมองหาค่า hash (ของ password) ในฐานข้อมูลที่ซ้ำๆ กันอยู่
- นั่นหมายถึงเจอยูสเซอร์ใช้ password ซ้ำกัน จึงเจอค่า hash ซ้ำกันนั่นเอง
- แล้วการที่ยูสเซอร์ใช้ซ้ำ แสดงว่ามันเป็น password ง่ายนะซิ เช่น
123456, 1111, Baseball, Qwerty, password
.
ดังนั้น hacker ก็แค่ค้นหาในตาราง
ตารางที่ว่าจะเก็บ password พร้อมค่า hash
(เก็บพวก password ที่คนใช้กันเยอะ)
ซึ่ง hacker ก็จะค้นหาหาในตารางดังกล่าว
แบบไล่สุ่มไปเรื่อยๆ เดี่ยวก็เจอไม่ยาก
:
++++
👉 ก็เพราะเหตุนี้จึงต้องหาวิธีแก้ทาง hacker
ให้เดาสุ่มหา password มันทวีความยุ่งยากไปอีก
(จุดประสงค์ป้องเทคนิคพวกเดาสุ่ม เช่น
dictionary attacks, Brute Force Attacks, Lookup Tables,
Reverse Lookup Tables, Rainbow Tables)
:
👉 สำหรับวิธีการป้องกัน ก็จะทำประมาณเนี่ย
ก่อนที่จะเก็บ password ลงฐานข้อมูล ระบบจะต้องทำเยี่ยงนี้
1) จะนำ password มากบวกกับค่า salt
2) จากนั้นนำค่าที่ได้จากข้อ 1 มาเข้า hash function
แล้วเก็บค่า hash ที่ได้ลงฐานข้อมูล
.
ขออธิบายข้อ 2 เพิ่มเติม
จากเดิมเราเรียกใช้ hash function เช่น
hash("1234")
แต่เราจะเปลี่ยนมาเรียก
hash("1234" + "QxLUF1bgIAdeQX")
hash("1234" + "bv5PehSMfV11Cd")
hash("1234" + "YYLmfY6IehjZMQ")
.
ซึ่ง "QxLUF1bgIAdeQX", "bv5PehSMfV11Cd", "YYLmfY6IehjZMQ" ที่ยกตัวอย่าง
มันก็คือค่า "salt" (ที่แปลว่า "เกลือ")
เป็นค่า radom ที่แจกให้แต่ละยูสเซอร์ ไม่ซ้ำกันเลย
เราจะนำมาบวกกับ password ก่อนเข้า hash function
:
เวลาเก็บ password ในฐานข้อมูล
แต่ละยูสเซอร์จะต้องเก็บทั้งค่า hash กับ salt เอาไว้
.
👉 พอเวลายูสเซอร์ล็อกอินใส่ user name / password
1) ระบบก็เอา password มาบวกกับ salt
(แต่ละยูสเซอร์เก็บค่า salt คนละค่า)
2) นำค่าที่ได้จากข้อ 1 มาเข้า hash funcion
3) นำค่าที่ได้จากข้อ 2 ไปเปรียบเทียบกับ ค่า hash ในฐานข้อมูล
4) ถ้าตรงกันแสดงว่ายูสเซอร์ป้อน password ถูกต้อง แสดงว่าล็อกอินสำเร็จ
..
แต่มีข้อแม้ hash function ที่ควรใช้ได้แก่
Argon2, bcrypt, scrypt ($2y$, $5$, $6$), หรือ PBKDF2
มันถึงจะปลอดภัย ทำให้การเดาสุ่มหา password ทำได้ยากขึ้น
.
ส่วนพวก hash function ที่ทำงานได้รวดเร็ว เช่น
MD5, SHA1, SHA256, SHA512, RipeMD, WHIRLPOOL, SHA3, etc.
เนี่ยห้ามใช้นะครับ
หรืออย่าง crypt (เวอร์ชั่น $1$, $2$, $2x$, $3$) ก็ไม่ห้ามใช้นะครับ
:
+++++
👉 ในแง่การเขียนโปรแกรม
เข้าใจว่าแต่ละภาษาโปรแกรมมิ่ง หรือพวกเฟรมเวิร์ค
เขาคงเตรียมไลบรารี่ หรือเครื่องมือ
เอาไว้ให้ใช้ hash function รวมกับค่า salt อยู่แล้ว
เราสามารถเปิดคู่มือ แล้วทำตามได้เลยครับ
:
++++
👉 ย้ำที่อธิบายทั้งหมดนี้
เป็นการป้องกันการเจาะระบบฝั่งแอพ หรือระบบเท่านั้น
hacker ยังสามารถเดาสุ่มป้อน password
ได้โดยตรงที่หน้าแอพ หรือฝั่งล็อกอินหน้าโปรแกรมได้เลย (Brute Force Attacks)
.
ทางที่ดีระบบต้องเช็กว่าถ้ายูสเซอร์กรอก password ผิดติดต่อกันกี่ครั้ง?
ถึงจะระงับการใช้ user name นี้ชั่วคราว หรือจะแบน IP ที่ล็อกอินเข้ามาไปเลยก็ยังได้
.
ยิ่งถ้าเป็นการล็อกอินผ่านเว็บไซต์
ก็ควรให้เว็บเราใช้โปรโตคอล https ขืนไปใช้ http ธรรมดา
โอกาสเจอ hacker ดักจับ user name/ passwod กลางทางมีสูงมาก
.
เว้นแต่เราจะใช้เทคนิค Digest Access Authentication เข้าช่วย
ทำให้การส่ง user name/password ผ่าน http ธรรมดาได้อย่างปลอดภัย (แต่โค้ดดิ่งก็จะยุ่งยากตาม)
:
+++
😁 สรุป
1) เก็บพาสเวิร์ดตรงๆ โดยไม่เข้ารหัส -> hacker ชอบนักแล
2) เก็บพาสเวิร์ดโดยเข้ารหัสในรูป Hash values -> hacker อ่านไม่ออกก็จริง แต่ไม่ยากที่จะเดา password
3) เก็บพาสเวิร์ดโดยเข้ารหัสในรูป Hash values + salt vaues
-> hacker อ่านไม่ออก ต่อให้ไปเดาสุ่ม ก็จะทำได้ยากขึ้น
จุดประสงค์ข้อ 3 นี้เพื่อป้องกันด้วยเทคนิค ..... dictionary attacks, Brute Force Attacks, Lookup Tables, Reverse Lookup Tables, Rainbow Table
.
สุดท้ายขอจบเรื่อง hash funcion กับ password
ให้รอดพ้นจาก hacker ไว้เพียงเท่านั้น
หวังว่าจะเป็นประโยชน์ต่อทุกท่านนะครับ
.
++++++
เขียนโดย โปรแกรมเมอร์ไทย thai programmer
อ้างอิง
https://crackstation.net/hashing-security.htm
https://en.wikipedia.org/wiki/Hash_function
password hash 在 Password Storage Cheat Sheet - GitHub 的推薦與評價
One of several peppering strategies is to hash the passwords as usual (using a password hashing algorithm) and then HMAC or encrypt the hashes with a ... ... <看更多>
password hash 在 Is it safe to publish the hash of my passwords? - Information ... 的推薦與評價
There are a couple problems with this approach. First of all, you're using two plain cryptographic hash functions to hash your data. ... <看更多>
password hash 在 How to use PHP's password_hash to hash and verify passwords 的推薦與評價
... <看更多>