เข้ารหัส password แค่นี้พอไหม?
$password = sha512hash($password.$salt);
ซึ่งตาม concept มันก็ใช้ได้แล้วเพราะมี salt มาช่วย แต่ทำไม cms หลายๆ เจ้าถึงได้มีโค้ดเข้ารหัสแบบซับซ้อนมาก อ่านแล้วก็งงว่ามันทำให้ปลอดภัยขึ้นจริงหรือ แล้วถ้าเราเขียนง่ายๆ แค่ข้างบนนี้มันดีพอหรือเปล่า
ใครเทพๆ ด้านการเข้ารหัสรบกวนด้วยครับ :)
ผมก็ไม่รู้ว่ามันจะแข็งแรงพอหร
wichate Sat, 08/03/2014 - 15:06
ผมก็ไม่รู้ว่ามันจะแข็งแรงพอหรือปล่าว ส่วนที่ซับซ้อนที่สุดน่าจะเป็นวิธีคิดเพื่อให้ได้มาของ $salt (โดย $salt ไม่ควรเป็นค่าคงที่)
salt ไม่ควรคงที่ครับ
nat3738 Sat, 08/03/2014 - 17:32
salt ไม่ควรคงที่ครับ
ถ้า salt ไม่ควรคงที่
crucifier Sat, 08/03/2014 - 20:03
ถ้า salt ไม่ควรคงที่ แล้วเวลาเรา login และตรวจสอบ password ค่า salt เปลี่ยนไปค่า hash ที่ได้ก็ไม่เหมือนเดิม แล้วจะเปรียบเทียบ password ได้ยังไงล่ะครับ?
หรือหมายถึงว่า salt ของแต่ละ user ไม่ควรเหมือนกัน แต่ต้องเป็นค่าของใครของมัน?
ถ้าเป็นอย่างนั้นเราใช้ username/id เป็นค่า salt ได้หรือไม่? แต่ก็มีปัญหาต่ออีกว่ามันก็เป็นข้อมูลที่เปิดเผยอยู่ดี แล้วเราจะเก็บค่า salt ไว้ที่ไหนล่ะ
ตรงนี้แหละที่ผมสงสัยมากครับ
ค่า salt
Ford AntiTrust Sat, 08/03/2014 - 20:18
ค่า salt ไม่ควรคงที่ถูกต้องแล้วครับ
logic จะประมาณด้านล่าง ตอน save ลง DB ให้เอา salt ผูกลงไปด้วยครับ ไว้ใช้ในการเปรียบเทียบตอน authen ครับ
ผมขอโค้ดสดๆ ลองดูนะครับ
$salt = md5(time());
$passhash = md5('password'.$salt);
$storetodb = $passhash.':'.salt;
===============
$passlist = explode(':', $hashfromdb);
$passhashindb = $passlist[0];
$salt = $passlist[1];
$passhashinput = md5($inputpassword.$salt);
if(passhashindb == $passhashinput) {
// valid
} else {
// invalid
}
โอเคเลยคุณฟอร์ด
crucifier Sat, 08/03/2014 - 20:41
โอเคเลยคุณฟอร์ด แบบนี้ผมเข้าใจเลย รูปแบบคล้ายๆ ของ Joomla! เก็บ salt ไว้กับ password แบบนี้เลย คำถามที่ยังคาใจอยู่ก็คือ ทำไมโค้ดของ cms หลายตัว (แม้กระทั่ง Joomla! 3 เองก็ตาม) ไม่ได้ดูเรียบง่ายแบบนี้ มันดูซับซ้อนเกินจะแกะไหว (ผมไม่มีพื้นฐานการเข้ารหัสเท่าไหร่ด้วย กำลังไล่อ่าน paper อยู่)
คำถามสุดท้าย...หากโค้ดของเราเรียบง่ายเหมือนตัวอย่างที่ผมให้ไว้ข้างบนหรือแบบของคุณฟอร์ดก็ตาม มันดีพอสำหรับการเข้ารหัส password หรือเปล่าครับ? ทั้งที่มันก็ถูกต้องตาม concept การเข้ารหัสที่ตำราต่างๆ บอกไว้ว่าเป็นที่ยอมรับกันโดยทั่วไป (ผมถามโดยเทียบกับความซับซ้อนของ cms ต่างๆ ที่ยังเป็นปริศนาสำหรับผมอยู่นะ)
โค้ดส่วนมากใน joomla authen
McKay Sat, 08/03/2014 - 21:17
In reply to โอเคเลยคุณฟอร์ด by crucifier
โค้ดส่วนมากใน joomla authen ที่เห็นเยอะๆส่วนมากก็เป็นการเช็คค่าต่างๆนะครับ ลองดูตรง comment ของ code ผมว่าอธิบายได้ครบเลย โค้ดตรง authen ส่วน password จริงๆมีแค่นี้
ขอบคุณครับ ผมเพิ่งไล่ดู code
crucifier Sat, 08/03/2014 - 21:17
In reply to โอเคเลยคุณฟอร์ด by crucifier
ขอบคุณครับ ผมเพิ่งไล่ดู code ของ cms วันนี้เอง ยังดูไม่ทั่วหรอก แต่มันสงสัยจนอดใจไม่ไหวต้องมาถามนี่แหละ 55
เข้าใจว่าหลายๆ cms
Ford AntiTrust Sat, 08/03/2014 - 21:14
เข้าใจว่าหลายๆ cms ใช้การสร้าง salt ที่ไม่มีแบบแผนตายตัว หรือไม่ให้ซ้ำกันในระดับ microsecond ซึ่งก็แล้วแต่ว่าแต่ละเจ้าจะเป็นแบบไหน แต่สุดท้าย logic ในภาพรวมก็ไม่แตกต่างกันครับ ด้านบนนั้นเป็นแบบ joomla และ drupal ใช้ เพราะผมก็แกะมาจากทั้งสองตัวนี้มาเป็น case study ครับ
ส่วนที่โครงสร้างโปรแกรมมันซํบซ้อน อาจจะเพราะป้องกันการแกะหรือป้องกัน injection ในเชิงโครงสร้างเวลาทำพวก module หรือ plugin น่ะครับ (ผมเดาเอานะ เพราะหลายตัวก็ลากไปโน้นนี่ extend เยอะแยะไปหมด)
ขอบคุณคุณฟอร์ดครับ ว่าแต่
crucifier Sat, 08/03/2014 - 21:18
In reply to เข้าใจว่าหลายๆ cms by Ford AntiTrust
ขอบคุณคุณฟอร์ดครับ ว่าแต่ Hoffman นี่ไม่มีวันฟื้นแล้วเหรอครับ ^^
ผมเอาโค้ดไปรวมกับ CI
Ford AntiTrust Sat, 08/03/2014 - 21:26
In reply to ขอบคุณคุณฟอร์ดครับ ว่าแต่ by crucifier
ผมเอาโค้ดไปรวมกับ CI แทนเมื่อหลายปีก่อนครับ แล้วก็เลิกทำ ตอนนี้ใช้ Laravel แทนเพราะมันโอเคดีครับ ><
แวะมาบอกว่าในคอมเม้น
mr_tawan Tue, 11/03/2014 - 05:24
แวะมาบอกว่าในคอมเม้น ถ้าเว้นวรรคข้างหน้า 4 วรรค (เหมือน stack overflow) โค๊ดจะฟอร์แมทถูกครับ ถึงจะไม่มี syntax highlight ก็เถอะ
<3
McKay Tue, 11/03/2014 - 10:07
In reply to แวะมาบอกว่าในคอมเม้น by mr_tawan
<3