“การเกิดขึ้นของกฎหมาย”
(ข้อมูลส่วนหนึ่งในตำรา หลักคิดทั่วไปในทางกฎหมายมหาชน)
เมื่อพิจารณาศึกษาถึงการเกิดของกฎหมาย จะเห็นได้ว่าการที่มนุษย์กำหนดกติกาอยู่ร่วมกันในสังคมภายในรัฐและสามารถพัฒนากฎหมายเป็นระบบกฎหมายดังที่ปรากฏและมีอิทธิพลอยู่ในปัจจุบัน คือ ระบบกฎหมายซิวิลลอว์ (Civil Law System) ระบบกฎหมายคอมมอนลอว์ (Common Law System) นั้นได้ผ่านการเปลี่ยนแปลงทางความคิดทางรูปแบบและโครงสร้างของกฎหมายหลายยุคหลายสมัย ซึ่งพอสรุปอย่างคร่าว ๆ ได้ ว่า กฎหมายได้ปรากฏตัวขึ้นโดยมีวิวัฒนาการกฎหมายที่เป็นเครื่องมือของรัฐควบคุมคนในสังคม แยกออกเป็น 3 ยุค คือ ยุคกฎหมายชาวบ้าน ยุคกฎหมายของนักกฎหมายและยุคกฎหมายเทคนิค ดังนี้
1. ยุคกฎหมายชาวบ้าน
ยุคกฎหมายชาวบ้าน (Folk Law) กฎหมายในยุคนี้ค่อย ๆ ก่อตัวขึ้นตามวิถีของคนในสังคมภายในรัฐ มีข้อพิจารณา อยู่ 2 ประการ ดังนี้
1.1 การอยู่รวมกันเป็นสังคมภายในรัฐเพื่อต้องการความมั่นคงปลอดภัยในชีวิตและทรัพย์สินมนุษย์แต่ละคนย่อมมีชีวิต เสรีภาพและการแสวงหาความสุข ซึ่งเกิดขึ้นนับตั้งแต่มนุษย์กำเนิดขึ้นในธรรมชาติ มนุษย์ไม่อาจอยู่ได้อย่างโดดเดี่ยวในธรรมชาติ จึงต้องรวมตัวกันเพื่อแบ่งหน้าที่และช่วยเหลือซึ่งกันและกันทั้งทางตรงและทางอ้อม แต่เมื่อมนุษย์อยู่รวมกันในสังคมภายในรัฐมากขึ้น ความเห็นแก่ตัวของคนแต่ละคนเกิดจากตัณหาภายในและความเสื่อมถอยแห่งคุณธรรมของคน ก็จะทำให้มนุษย์บางคนกระทำความผิด เช่น การละเลยไม่ปฏิบัติตามหน้าที่ของตน การหยิบฉวยสิ่งของอันเป็นกรรมสิทธิ์ของผู้อื่นโดยไม่มีสิทธิโดยชอบธรรมหรือเจ้าของไม่ยินยอม การพรากลูกผิดเมียเขา การทำร้ายร่างกายและชีวิตของผู้อื่น ฯลฯ ความผิดเหล่านี้เมื่อมีมากขึ้นย่อมจะทำให้ความเป็นอยู่ของมนุษย์โดยส่วนรวมในสังคมวุ่นวายไม่สงบ มนุษย์ส่วนใหญ่ได้รวมตัวกันแบบสมาคมเพื่อต้องการความมั่นคงปลอดภัยในชีวิตและทรัพย์สินจึงจำเป็นต้องอาศัยข้อกำหนดหรือกฎเกณฑ์ข้อบังคับที่เกิดขึ้นจากความเชื่อระหว่างศีลธรรมและเหตุผลของเรื่อง อันเป็นเงื่อนไขข้อตกลงที่ยอมรับร่วมกัน เพื่อให้ทุกคนในสังคมภายในรัฐยึดถือปฏิบัติร่วมกัน กฎเกณฑ์ ข้อบังคับที่ว่านี้ค่อยพัฒนาจนเรียกว่า “กฎหมาย” (Law) แต่เป็นไปลักษณะในรูปขนบธรรมเนียมประเพณี
1.2 กฎเกณฑ์การควบคุมความประพฤติปรากฏออกมาในของขนบธรรมเนียมจารีตประเพณี
กฎเกณฑ์ความประพฤติที่ปรากฏออกมาในรูปของขนบธรรมเนียมจารีตประเพณีที่สำคัญอยู่ 3 ประการ ดังนี้
1.อันใดจะเป็นจารีตประเพณีได้ ต้องเป็นแนวประพฤติปฏิบัติที่ดำเนินสืบ ๆ ต่อกันมาเป็นเวลาช้านาน โดยผู้ปฏิบัตินั้นรู้สึกร่วมกันว่าจะต้องปฏิบัติตาม เป็นกฎเกณฑ์ควบคุมความประพฤติเช่นเดียวกับกฎหมาย เป็นต้น
2. ต้องเป็นที่ยอมรับกันในชุมชนว่าเป็นสิ่งที่ถูกต้อง ถ้าไม่ปฏิบัติตามเช่นนั้นก็รู้สึกว่าเป็นสิ่งที่ผิด
3. ต้องเป็นการปฏิบัติอย่างสม่ำเสมอ และตลอดเวลาเมื่อมีกรณีดังกล่าวเกิดขึ้น
2.ยุคกฎหมายนักกฎหมาย
ยุคกฎหมายนักกฎหมาย (Juris Law) เป็นยุคที่กฎหมายเจริญขึ้นต่อจากยุคแรก ซึ่งยังไม่สามารถแยกกฎหมายออกจากศีลธรรม ต่อมาถึงยุคกฎหมายของนักกฎหมายมองเห็นว่า กฎหมายเป็นกฎเกณฑ์อีกแบบหนึ่ง ซึ่งแตกต่างจากศีลธรรมและขนบธรรมเนียมจารีตประเพณี มีกระบวนการพิจารณาและบังคับคดีชุมชน คือ เริ่มจากการปกครองที่เป็นรูปธรรมทำให้ชุมชนกลายเป็นชุมชนที่เจริญมีกระบวนการยุติธรรมอย่างเป็นกิจจะลักษณะเป็นชุมชนที่มีการวางกฎ กติกาที่อยู่ร่วมกัน ทำให้มีกฎเกณฑ์เกิดขึ้นใหม่เป็นการเสริมกฎเกณฑ์เก่าที่มีอยู่ในรูปแบบขนบธรรมเนียมประเพณี เติมแต่งให้มีรายละเอียด เพื่อแก้ปัญหาที่เกิดขึ้นในคดีที่สลับซับซ้อน เมื่อตัดสินคดีไปหลายคดี ข้อที่เคยปฏิบัติในการพิจารณาคดีก็จะมีเพิ่มมากขึ้นเรื่อย ๆ จนกลายเป็นกฎเกณฑ์ที่เราเรียกว่า “กฎหมายของนักกฎหมาย” ทั้งที่เป็นลายลักษณ์อักษรและไม่เป็นลายลักษณ์อักษร ดังนั้นยุคกฎหมายของนักกฎหมายมีข้อพิจารณาการเกิดกฎหมายอยู่ 2 ลักษณะ ดังนี้
2.1 การนำจารีตประเพณีมาบัญญัติให้มีความชัดเจนแน่นอน
การนำจารีตประเพณีมาบัญญัติเป็นลายลักษณ์อักษรเป็นข้อบังคับที่มีความแน่นอน เป็นกติกาที่อยู่ร่วมกันของคนในสังคมภายในรัฐ การเกิดของกฎหมายในลักษณะนี้เป็นที่มาของระบบกฎหมายซิวิลลอว์ (Civil Law System)
2.2 การปรุงแต่งการตัดสินวินิจฉัยชี้ขาดข้อพิพาทแล้วยอมรับปฏิบัติตาม
การปรุงแต่งหลักการปฏิบัติมาปรุงแต่งในการตัดสินชี้ขาดข้อพิพาทในสังคมและเดินตามการปฏิบัติการการตัดสินคดีนั้นว่าเป็นสิ่งที่ถูกต้องจึงปฏิบัติตามและเป็นการปฏิบัติตามอย่างสม่ำเสมอเป็นกฎหมายประเพณี การเกิดของกฎหมายในลักษณะนี้เป็นที่มาของระบบกฎหมายคอมมอนลอว์ (Common Law System)
3.ยุคกฎหมายเทคนิค
ยุคกฎหมายเทคนิค (Technical Law) เมื่อสังคมเจริญขึ้นการติดต่อระหว่างคนในสังคมภายในรัฐ มีมากขึ้นและใกล้ชิดยิ่งขึ้นซับซ้อนยิ่งขึ้น เครื่องมือ เครื่องใช้ ในการดำรงชีวิตก็มีมากขึ้น ความขัดแย้งในสังคมภายในรัฐ ก็มีมากขึ้น กฎเกณฑ์ที่เป็นขนบธรรมเนียมประเพณีไม่เพียงพอ จึงจำต้องมีกฎเกณฑ์ที่บัญญัติขึ้นมาทันทีเพื่อแก้ปัญหาที่เกิดขึ้นหรือวางหลักเกณฑ์ใหม่ที่ยังไม่เกิดขึ้นตามสถานการณ์บ้านเมือง กฎหมายจึงถือเป็นเครื่องมือที่สำคัญในการควบคุมคนในสังคมภายในรัฐ
ดังนั้นเมื่อพิจารณาศึกษาถึงกฎหมายเทคนิคเป็นกฎหมายที่เกิดขึ้นโดยกระบวนการนิติบัญญัติ มีข้อพิจารณาอยู่ 2 ประการ ดังนี้
3.1 กฎหมายที่บัญญัติขึ้นทันทีเพื่อวัตถุประสงค์บางประการ
กฎหมายที่บัญญัติขึ้นทันทีเพื่อวัตถุประสงค์บางประการ ซึ่งเป็นเหตุผลทางเทคนิค เป็นการสร้างแนวคิดที่ส่งเสริมให้ระบบกฎหมายเน้นประโยชน์ของประชาชนเป็นใหญ่และ เน้นบทบาทในการควบคุมสังคมภายในรัฐ ที่สำคัญ คือ เป็นฐานความคิดหลักกฎหมายที่ผลักดันให้มีการตรากฎหมายใหม่ ๆ ที่มุ่งควบคุมระเบียบของสังคมภายในรัฐ ให้เกิดความสมดุล
3.2 กฎหมายที่เป็นกฎเกณฑ์เหล่านั้นเกี่ยวข้องกับศีลธรรมหรือไม่
ในทางสากลในแง่ของการถกเถียงทางปรัชญากฎหมายของตะวันตกเกี่ยวกับศีลธรรมนี้ มีข้อถกเถียงถึงเราควรนำศีลธรรมมาการควบคุมโดยกฎหมายหรือไม่ ศาสตราจารย์ จรัญ โฆษณานันท์ ได้อธิบายแนวคิดเกี่ยวกับการควบคุมกฎหมายโดยศีลธรรม อยู่ 2 กลุ่มแนวคิด ดังนี้
3.2.1 กฎหมายที่เป็นกฎเกณฑ์ใช้ควบคุมคนในสังคมภายในรัฐ ต้องเกี่ยวข้องกับศีลธรรมเสมอ
กฎหมายที่เป็นกฎเกณฑ์ใช้ควบคุมคนในสังคมภายในรัฐ ต้องเกี่ยวข้องกับศีลธรรมเสมอ คือ “กลุ่มศีลธรรมนิยม” ที่ให้ความสำคัญกับหลักภยันตรายต่อผู้อื่นและตัวเราเองหรือ เรียกว่า “หลักละเมิดต่อผู้อื่นกับหลักการละเมิดตนเอง” ควรนำศีลธรรมมาควบคุมโดยกฎหมาย เช่น เซอร์เจมกลุ่มศีลธรรมนิยม: หลักศีลธรรมควบคุมโดยกฎหมายที่ “เป็นเรื่องละเมิดผู้อื่น” กับ “เป็นเรื่องละเมิดตนเอง” มีนักปรัชญาหลานท่านด้วยกันที่มีมุมมองในเรื่องของการให้ความสำคัญของการควบคุมศีลธรรมโดยกฎหมาย ได้แก่ ลอร์ด เดฟลิน (Lord Devlin) เซอร์เจมส์ ฟิทส์เจมส์ สตีเฟน (Sir James Fish stefen) เฮช แอล เอ ฮาร์ท ดังนี้
1. ลอร์ด เดฟลิน (Lord Devlin) ได้บรรยายในหัวข้อ “การบังคับให้เป็นไปตามศีลธรรม” (The Enforcement of Morals) ขึ้นในปี ค.ศ.1959 มองว่า “หน้าที่ของกฎหมายโดยเฉพาะกฎหมายอาญานั้นควรจะเข้ามามีหน้าที่ในการบังคับควบคุมศีลธรรม” (ในทัศนะลอร์ด เดฟลิน) ซึ่งคล้ายกับเพลโตซึ่งได้กล่าวไว้ว่า ผู้บัญญัติกฎหมายนั้นจะต้องตราด้วยว่าสิ่งใดเป็นความเลวความชั่วร้าย สิ่งใดเป็นความดีด้วย ไม่ใช่เป็นเครื่องมือในการรักษาความสงบเรียบร้อยของสังคมอย่างเดียว แต่ต้องเป็นตัวชี้ว่า ดีคืออะไร เลวคืออะไร แล้วเข้าบงการ ลอร์ด เดฟลิน (Lord Devlin) ได้บรรยายในหัวข้อ “การบังคับให้เป็นไปตามศีลธรรม” (The Enforcement of Morals) ขึ้นในปี ค.ศ.1959
เดฟลิน เสนอทัศนะว่า สังคมมีสิทธิลงโทษการกระทำผิดใดๆ ซึ่งในสายตาของบุคคลผู้มีจิตใจเที่ยงธรรมเห็นว่าขัดต่อศีลธรรมอย่างแจ้งชัดและไม่มีความจำเป็นใดๆ ที่จะมาพิสูจน์ว่าการกระทำเช่นนั้นเป็นอันตรายต่อบุคคลหรือบุคคลโดยเฉพาะอื่นๆหรือไม่ และ เดฟลิน ได้เสนอทัศนะ เรื่อง “การสมานสามัคคีของสังคม” (Social Cohesion) เพื่อเป็นเหตุผลสนับสนุนให้มีการบังคับศีลธรรมในสังคมโดยอาศัยกฎหมาย เช่น การตรากฎหมายจัดการกับปัญหารักร่วมเพศ เป็นต้น เดฟลิน ยืนยันว่าในสังคมมนุษย์ใด ๆ ก็ตามจะมีส่วนที่เรียกว่า “ศีลธรรมของส่วนรวม” (Public Morality) เป็นตัวเชื่อมต่อผูกพันระหว่างปัจเจกชนด้วยกันเสมือนท่วงทีที่มองไม่เห็น และกฎหมายโดยเฉพาะอย่างยิ่งกฎหมายอาญาต้องถือว่าเป็นพื้นฐานในการรักษาไว้ซึ่งศีลธรรมของส่วน รวม กล่าวอีกอย่างหนึ่งคือการควบคุมลงโทษพฤติกรรมซึ่งผิดศีลธรรมนั้นเป็น “สิทธิของสังคม” (Social Rights) เพื่อปกป้องความอยู่รอดของตัวเองเช่นเดียวกับความจำเป็นต้องมีกฎหมายเพื่อปกป้องการกบฏต่าง
2. เซอร์เจมส์ ฟิทส์เจมส์ สตีเฟน (Sir James Fish stefen) พยายามคิดค้าน โดยกล่าวว่าหลักภยันตรายต่อตนเองของ มิลล์ ไม่มีจริง เพราะการกระทำที่ก่อให้เกิดผลร้ายต่อตัวผู้กระทำนั้นล้วนแต่ก่อให้เกิดภยันตรายต่อบุคคลอื่นด้วย สตีเฟน บอกว่าเราไม่สามารถจะลากเส้นแบ่งแยกอันชัดเจนระหว่างการกระทำที่เป็นอันตรายต่อบุคคลอื่น และการกระทำที่เป็นอันตรายต่อตัวผู้กระทำได้ เช่น การเที่ยวโสเภณี เรื่องการทำแท้ง หรือค้าประเวณี จะก่อให้เกิดผลกระทบต่อผู้อื่นแน่นอน (การกระทำแท้งนั้นจะเห็นได้ว่ามีผู้อื่นปรากฏอยู่ในท้องแล้วคือเด็ก ซึ่งเด็กก็คือผู้อื่นแล้ว) ดังนั้น สตีเฟน จึงสนับสนุนการลงโทษที่เป็นความผิดบาปทางศีลธรรมอันชัดแจ้ง โดยถือว่าวัตถุประสงค์อันชอบธรรมของกระบวนการตรานิติบัญญัติ (การตรากฎหมาย) ซึ่งคนส่วนใหญ่จะไม่ถือว่าเป็นการตัดรอนเสรีภาพ แต่กลับเห็นว่าเป็นความถูกต้อง เพราะสามารถควบคุมความเลวร้ายดังกล่าว ซึ่งเป็นการทดแทนยับยั้งมิให้เกิดการผูกพยาบาทตอบโต้อย่างสับสน
3. เฮช แอล เอ ฮาร์ท (H.L.A Hart) ให้ความสำคัญต่อเรื่อง “จิตวิทยาสังคม” โดย “ฮาร์ท” ตั้งคำถามว่า “การพิจารณาแนวทางเลือกใหม่ซึ่งมิใช่เรื่องการปกป้องศีลธรรมร่วมนั้นแต่จะนำไปสู่ภาวะความขัดแย้งปรปักษ์ตามธรรมชาติดั้งเดิม” (แบบที่อยู่กันแบบเห็นแก่ตัว) ฮาร์ท เห็นว่าคำตอบที่ถูกน่าจะเป็นภาวะการดำรงอยู่ร่วมกันมากกว่าอย่างอื่น ซึ่งมีคำตอบ อยู่ 2 คำตอบ ดังนี้
คำตอบที่ 1 จะเป็นแบบปล่อยให้ทำได้ตาม “อำเภอใจ” (Permissiveness) โดยที่ผู้ปฏิเสธแนวทางนี้ต้องมีการแสดงให้เห็นว่าความเสื่อมของศีลธรรมเช่นว่าจะนำไปสู่ความอ่อนในความสามารถควบคุมตัวเองของปัจเจกบุคคลอีกทั้งส่งเสริมให้เกิดความรุนแรงหรือความไม่ซื่อสัตย์ในสังคมเพิ่มขึ้น
คำตอบที่ 2 ในอีกด้านหนึ่งเป็นความเชื่อใน “ความหลากหลายของศีลธรรม” (Moral Pluralism) ในมโนภาพของ โธมัส ฮ็อบส์ (Thomas Hobbes) หรือว่าจะนำไปสู่ภาวะสังคมที่มี “ขันติธรรม” อดกลั้นต่อกัน เป็นภาวการณ์ดำรงอยู่ร่วมกันท่ามกลางความแตกต่างของศีลธรรม
อย่างไรก็ตาม แม้ ฮาร์ท จะคัดค้านทัศนะแบบเคร่งศีลธรรมของ เดฟลิน อย่างมากในข้างต้นก็ตาม แต่ ฮาร์ท ก็ยอมรับถึงความจำเป็นในการใช้กลไกทางกฎหมายบังคับควบคุมศีลธรรมบางอย่างที่สำคัญต่อสังคม ศีลธรรมในส่วนนี้เรียกได้ว่าเป็น “หลักคุณค่าสากล” (Universal Values) ตัวอย่างเช่น กรณีการทำร้ายชีวิตมนุษย์ด้วยกัน เป็นต้น นอกจากนี้ในแต่ละสังคมย่อมมีแกนกลางของกฎเกณฑ์หรือหลักการที่ประกอบกันเป็นพื้นฐานของวิถีชีวิตซึ่งมีลักษณะเฉพาะของสังคมนั้น อาทิเช่น ระบบการมี “คู่สมรสคนเดียว” (Monogamy)
ข้อที่น่าสนใจ ฮาร์ท ยังยอมรับเรื่องข้อยกเว้นในการควบคุมศีลธรรมโดยกฎหมายข้างต้นแล้ว ฮาร์ท ยังยอมรับบทบาทของกฎหมายในการจำกัดเสรีภาพส่วนบุคคลบางประการกับปัจเจกบุคคลด้วย โดยฮาร์ทเสนอให้ “หลักปิตาธรรม” ผนวกเข้ากับหลักภยันตรายของ มิลล์ เพื่อเป็นเหตุผลรับรองบทบาทหน้าที่ที่เพิ่มขึ้นของกฎหมาย ซึ่งหลักปิตาธรรมนั้นเป็นหลักการที่เกิดขึ้นในฐานะเหตุผลเพื่อการปกป้องมิให้บุคคลกระทำสิ่งที่อาจเป็นอันตรายต่อตัวเขาเองมากกว่าผู้อื่น หลักปิตาธรรมจึงอาจนำไปใช้เพื่อแทรกแซงให้ยุติหรือมิให้กระทำการใด ๆ ที่เป็นผลร้ายหรือ “สร้างความทุกข์” (Suffering) ต่อบุคคลนั้น ๆ เอง ตัวอย่างเช่น การห้ามมิให้เสพยาเสพติดหรือบุหรี่ หรือการบังคับให้รัดเข็มขัดนิรภัยในระหว่างขับขี่รถยนต์ การบังคับให้ต้องสวมหมวกกันน๊อค (หมวกนิรภัย) ขณะที่ขี่จักรยานยนต์ เป็นต้น
เมื่อพิจารณาศึกษาจะพบว่า “หลักปิตาธรรม” นั้นมีความแตกต่างไปจาก “หลักศีลธรรมนิยมทางกฎหมาย” (Legal Moralism) ของ เดฟลิน เนื่องจากมิใช่เป็นหลักที่มุ่งบังคับควบคุมศีลธรรมที่ยึดถือกัน แต่เป็นหลักที่เกิดสืบแต่ความรู้สึกเมตตาห่วงใยทำนองเดียวกับที่บิดามีต่อบุตร ไม่แน่ใจในความสามารถใช้ดุลยพินิจอย่างถูกต้องของผู้อาจตกเป็นเหยื่อของความเสียหายได้ ดังนั้น “หลักปิตาธรรม”นับเป็นเหตุผลพื้นฐานที่สำคัญข้อหนึ่ง ในการอธิบายบทบาทหน้าที่ของกฎหมายในสังคมควบคู่ไปกับ “หลักอันตรายต่อผู้อื่น” (Harm principle) “หลักศีลธรรมนิยมทางกฎหมาย” (Legal Moralism) รวมทั้งหลักการอื่นๆ นอกเหนือจากที่ได้กล่าวมาอาทิ เช่น “หลักการล่วงเกิน” (Offeness principle) สนับสนุนให้รัฐแทรกแซงจำกัดเสรีภาพในการกระทำซึ่งเห็นว่าล่วงเกินความรู้สึกของคนทั่วๆไป แม้ว่าการกระทำนั้นจะไม่ก่อให้เกิดผลร้ายโดยชัดเจนใด ๆ หลักการนี้จึงมักนำมาใช้เป็นเหตุผลเพื่อการปราบปรามสิ่งพิมพ์หรือการกระทำอันเป็นลามกอนาจารต่าง ๆ “หลักสวัสดิการ” (Welfare principle) เป็นหลักสำหรับออกกฎหมายจำกัดเสรีภาพเพื่อประโยชน์แก่ส่วนรวม ดังกรณีการบังคับให้เสียภาษี หรือค่าธรรมเนียมต่าง ๆ เพื่อการให้ “บริการสาธารณะ” (Public service) หรือการวางหลักประกันสังคม เป็นต้น ภายใต้หลักการปกครอง “แบบนิติรัฐ” (Legal State) และ หลักกการปกครอง “แบบนิติธรรม” (The Rule of Law)
3.2.2 กฎหมายที่เป็นกฎเกณฑ์ใช้บังคับควบคุมคนในสังคมภายในรัฐ ไม่ต้องเกี่ยวข้องกับศีลธรรม
กฎหมายที่เป็นกฎเกณฑ์ที่ใช้บังคับควบคุมคนในสังคมภายในรัฐ ไม่จำเป็นต้องเกี่ยวข้องกับศีลธรรม คือ “กลุ่มแนวคิดเสรีนิยม” ที่ให้ความสำคัญกับหลักภยันตรายต่อผู้อื่นเป็นสำคัญ ไม่ควรนำศีลธรรมมาควบคุมโดยกฎหมายในกรณีที่กระทำเดือดร้อนตนเอง เช่น จอห์น สจ๊วต มิลล์ (Jhon Stuart Mill),เซอร์ จอห์น วูลฟ์เฟนเดน (Sir John Wolfenden)
1. จอห์น สจ๊วต มิลล์: เสรีภาพเป็นประโยชน์สุขของคนในสังคม จอห์น สจ๊วต มิลล์ (Jhon Stuart Mill) เป็นนักเสรีนิยมและนักอรรถประโยชน์ (อรรถประโยชน์ หมายความว่า เป็นคนที่มองว่า “สิ่งที่ดีถูกต้องดูที่ผลลัพธ์การกระทำซึ่งเป็นการก่อให้เกิดความสุข” ตามแบบอรรถประโยชน์เชิงกระทำ) มิลล์ เน้นในเรื่องเสรีภาพในแง่ที่เป็นประโยชน์สุขของคนในสังคม เพราะมนุษย์คงไม่สามารถมีความสุขได้ ถ้าหากว่าขาดเสรีภาพ ดังนั้นเสรีภาพกับสิ่งที่เป็นประโยชน์สุขของคนจึงมีความเชื่อมโยงกัน มิลล์ พยายามที่จะเน้นเรื่องคุณค่าของเสรีภาพว่ามันเป็นพื้นฐานของการใช้ชีวิตของคนและเป็นสิ่งจำเป็นอย่างยิ่ง
ด้วยคุณภาพแห่งเสรีภาพนี้เอง มิลล์ จึงพยายามที่จะนำมาขีดเป็นกรอบจำกัดบทบาทของกฎหมาย มิลล์ ได้เขียนเรื่อง “ความเรียงว่าด้วยเสรีภาพ” (Essay on Liberty) ในความเรียงของ มิลล์ ในเรื่องดังกล่าวได้ประกาศถึง “หลักอันตรายต่อสังคม” โดยมีความที่สำคัญท่อนหนึ่งว่า เป้าหมายของความเรียงนี้ คือ การประกาศยืนยันหลักการง่าย ๆ ข้อหนึ่ง ซึ่งชอบที่จะใช้ควบคุมอย่างเด็ดขาดต่อความสัมพันธ์ของสังคมกับปัจเจกบุคคลในรูปการบังคับ และควบคุมไม่ว่าจะเป็นไปโดยกำลังกาย ภายในลักษณะของบทลงโทษทางกฎหมายหรือโดยการข่มขู่เชิงศีลธรรมในลักษณะของมติมหาชน หลักการดังกล่าวคือวัตถุประสงค์หรือเป้าหมายเดียวสำหรับค้ำประกันมนุษย์ชาติ ไม่ว่าจะเป็นรายบุคคลหรือโดยส่วนรวมให้ปลอดจากการล่วงละเมิดเสรีภาพ ในการกระทำของสมาชิกในสังคม คือ “การป้องกันตนเอง” (Self protection) ในสังคมศิวิไลซ์นั้น “รัฐมีความชอบธรรมที่จะใช้อำนาจบังคับสมาชิกของชุมชน เพียงเพื่อวัตถุประสงค์จะป้องกันภยันตรายอันจะเกิดกับบุคคลอื่นในสังคม ส่วนภยันตรายที่เกิดขึ้นแก่ตนโดยไม่มีบุคคลใดเป็นผู้ก่อให้เกิด ไม่ว่าจะเป็นทางกายภาพหรือทางจริยธรรม แล้วย่อมไม่เป็นข้ออ้างอันเพียงสำหรับจำกัดเสรีภาพในการกระทำของมนุษย์”
สรุป ได้ว่าแนวคิดของมิลล์ การนำหลักศีลธรรมควบคุมโดยกฎหมาย ที่เรียกว่าหลักการละเมิด แยกได้ 2 หลัก คือ เป็นเรื่อง “ละเมิดผู้อื่น” กับ เป็นเรื่อง “ละเมิดตนเอง” ดังนั้นการที่ออกกฎหมายมาบังคับใช้ได้นั้นจะต้องเป็นเรื่องของ “การละเมิดผู้อื่น” เท่านั้น ถ้าเป็นเรื่องของ “การละเมิดตนเอง” มิลล์ บอกว่า ไม่สมควรจะมีกฎหมายมาบังคับใช้เพื่อเพียงเหตุผลทางศีลธรรมหรือเพื่อเพียงสวัสดิภาพของปัจเจกชน ถ้าการตรากฎหมายในลักษณะนี้ ถือว่าเป็นการจำกัดเสรีภาพถือเป็นการทำลายความสุขส่วนบุคคล เมื่อเราพิจารณาศึกษา “ถึงศีล 5 ในพระพุทธศาสนา” นำมาจัดแบ่งกลุ่มตามหลักแนวคิดหลักการละเมิด ตามแนวคิดของ มิลล์ มาพิจาณา ดังตารางเปรียบเทียบ ดังนี้
ตารางที่ 1 เปรียบเทียบศีล 5 ในพระพุทธศาสนากับหลักการละเมิด
ตามแนวคิดของมิลล์
ศีล 5 ในพระพุทธศาสนา หลักการละเมิด หลักการละเมิดของ มิลล์
ศีลข้อที่ 1 ห้ามฆ่าสัตว์ การละเมิดผู้อื่น หลักแนวคิดของ มิลล์ สามารถออกกฎหมายมาบังคับได้
ศีลข้อที่ 2 ห้ามลักทรัพย์ การละเมิดผู้อื่น หลักแนวคิดของ มิลล์ สามารถออกกฎหมายมาบังคับได้
ศีลข้อที่ 3 ห้ามประพฤติผิดในกาม การละเมิดผู้อื่น หลักแนวคิดของ มิลล์ สามารถออกกฎหมายมาบังคับได้
ศีลข้อที่ 4 ห้ามพูดเท็จ การละเมิดผู้อื่น หลักแนวคิดของ มิลล์ สามารถออกกฎหมายมาบังคับได้
ศีลข้อที่ 5 ห้ามดื่มสุราของมึนเมา การละเมิดตนเอง หลักแนวคิดของ มิลล์ สามารถออกกฎหมายมาบังคับไม่ได้
2. เซอร์ จอห์น วูลฟ์เฟนเดน (Sir John Wolfenden) ได้เสนอ “รายงานของคณะกรรมการว่าด้วยความผิดฐานรักร่วมเพศและการค้าประเวณี” ในปี ค.ศ.1957 โดยมีเนื้อหาสาระสะท้อนความคิดของ มิลล์ พยายามเสนอ กำหนดบทบาทหน้าที่อันชัดเจนของกฎหมายอาญา ให้แยกความแตกต่างระหว่างอาชญากรรมกับบาปกรรม รวมทั้งยืนยันถึงขอบเขตอันเป็นเรื่องส่วนตัวของศีลธรรมและการผิดศีลธรรมซึ่งถือว่าไม่ใช่กิจธุระอันกฎหมายสมควรเข้าไปยุ่งเกี่ยว ตัวอย่างเช่น การค้าประเวณี มันคือ เสรีภาพของบุคคลที่ไม่ทำให้ใครเดือดร้อน เป็นส่งเสริมความสุขของคน ศีลธรรมไม่ควรเข้ามายุ่งเกี่ยวเพราะไม่เป็นการกระทำที่เดือดร้อนผู้อื่น เป็นต้น
เมื่อพิจารณาศึกษาถึงความ โดยทั่วไปของกฎหมาย พบว่า “กฎหมาย” (Law) คือ กฎระเบียบข้อบังคับควบคุมความประพฤติของมนุษย์ในสังคมภายในรัฐ ที่ออกโดยรัฐ เป็นข้อบังคับที่มีความแน่นอนบังคับอย่างเป็นกิจลักษณะที่แตกต่างไปจากกฎเกณฑ์ทางสังคมภายในรัฐ และกฎหมายมีสภาพบังคับ ส่วน “ศีลธรรม” (Moral) หมายถึง ความรู้สึกภายในจิตใจของมนุษย์ว่าการกระทำนั้นผิดหรือถูก ดังนั้นเราจะพบว่า “ศีลธรรมกับกฎหมายมีอิทธิพลต่อกันมาก” การที่มีศีลธรรมสูงเป็นที่เชื่อได้ว่าไม่เคยฝ่าฝืนกฎหมายแต่อย่างใด ในทางกลับกันคนที่ไม่มีศีลธรรม กฎหมายก็จะช่วยยกฐานะให้คน ๆ นั้นมีศีลธรรมดีขึ้น ตัวอย่างเช่น การลักเล็กขโมยน้อยกฎหมายก็ให้ติดคุกรับโทษเพื่อขัดเกลาให้มีความคิด มีศีลธรรม เมื่อออกมาแล้วมีศีลธรรมสูงไม่กล้าลักขโมยอีต่อไป เป็นต้น แต่อย่างไรก็ตามศีลธรรมกับกฎหมายอาจเป็นศัตรูกันได้ ในกรณีกฎหมายอาจบังคับให้มนุษย์งดเว้นกระทำการแต่ศีลธรรมบังคับให้กระทำ ตัวอย่างเช่น การเบิกความเท็จต่อศาลซึ่งกฎหมายลงโทษห้ามกระทำแต่ความจริงแล้วการกระทำนั้นกระทำลงไปเพื่อช่วยเหลือผู้มีอุปการะคุณต่อตนตามหลักศีลธรรม เป็นต้นกฎหมายที่เป็นกฎเกณฑ์เหล่านั้นเกี่ยวข้องกับศีลธรรมก็ได้ ขึ้นอยู่กับวัตถุประสงค์หรือเจตนารมณ์แห่งกฎหมายที่ได้บัญญัติขึ้นมาเพื่อเป็นเครื่องมือของรัฐควบคุมคนในสังคมภายในรัฐ ให้ถูกต้องเป็นธรรมและยุติธรรม
ดังนั้นกฎหมายเทคนิคจะเป็นกฎหมายที่มาจากการบัญญัติด้วยเหตุผลบางประการโดยเฉพาะ เช่น กฎหมายจราจรแต่เดิมไม่มีรถยนต์ในการสัญจรของคนในสังคมภายในรัฐ มีแต่เทียมเกวียนใช้ในการสัญจรซึ่งไม่มีความสลับซับซ้อน แต่ต่อมาสังคมภายในรัฐ มีความเจริญก้าวหน้ามีรถยนต์ใช้ในการสัญจรจำเป็นต้องมีกฎหมายกำหนดกติกาขึ้นมาแก้ไขปัญหาการสัญจรของคนในสังคมภายในรัฐ ก็มีการออกกฎหมายจราจรขึ้นมา เป็นต้น
เมื่อพิจารณาศึกษาถึงการเกิดของกฎหมายทั้ง 3 ยุค ในปัจจุบันเราถือว่า อยู่ใน “ยุคกฎหมายเทคนิค” เพราะต้องออกฎหมายมาแก้ไขปัญหาสังคมภายในรัฐ หรือบังคับใช้กับประชาชนภายใต้สภาพแวดล้อมและเงื่อนไขทางสังคมภายในรัฐ เพื่อให้มีความสงบเรียบร้อยหรือความสงบสุขของคนในสังคมภายในรัฐ ตามหลักการปกครองแบบนิติรัฐ (Legal State) ที่ยึดหลักนิติธรรม (The Rule of Law)
values หมายถึง 在 โปรแกรมเมอร์ไทย 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
values หมายถึง 在 โปรแกรมเมอร์ไทย 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