Cryptographic Hashing: คู่มือสำหรับผู้เริ่มต้น

การแฮชการเข้ารหัสเป็นส่วนหนึ่งของสเปกตรัมความปลอดภัยทางไซเบอร์ ในความเป็นจริงมีการใช้กันอย่างแพร่หลายในเทคโนโลยีต่างๆรวมถึง Bitcoin และโปรโตคอล cryptocurrency อื่น ๆ.

ในบทความนี้เราจะพูดถึงการแฮชในสกุลเงินดิจิทัลที่เราเรียนรู้เกี่ยวกับแฮชการเข้ารหัสตัวอย่างประวัติและอื่น ๆ.

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

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

 

Cryptographic Hashing คืออะไร?

ในการเข้ารหัสการแฮชเป็นวิธีการที่ใช้ในการแปลงข้อมูลเป็นสตริงข้อความเฉพาะ ข้อมูลจะถูกแปลงเป็นวิธีการที่มีประสิทธิภาพมากซึ่งข้อมูลจะถูกแฮชภายในเวลาไม่กี่วินาที นอกจากนี้ไม่มีข้อ จำกัด เกี่ยวกับประเภทของข้อมูลหรือขนาด – การแฮชใช้ได้กับทุกข้อมูล.

แล้วอะไรที่ทำให้การแฮชเป็นที่นิยมและไม่เหมือนใคร? เป็นเพราะไม่สามารถย้อนกลับได้!

ใช่มันเป็นฟังก์ชันทางเดียว (ฟังก์ชันแฮชการเข้ารหัส) และได้รับการออกแบบมาให้ทำงานเช่นนั้นเท่านั้น.

ในฟังก์ชันทางเดียวข้อมูลเมื่อใส่ลงในอัลกอริทึมการแฮชแล้วจะส่งออกสตริงที่ไม่ซ้ำกัน อย่างไรก็ตามไม่สามารถใช้สตริงที่ไม่ซ้ำกันในการถอดรหัสข้อมูลต้นฉบับโดยใส่กลับไปที่ฟังก์ชันแฮช ความมีประโยชน์และคุณสมบัติเช่นนี้ทำให้การเข้ารหัสลับมีประโยชน์มากในการปกป้องข้อมูลและข้อมูล.

ตรวจสอบด้วย

  • วิธีสร้าง Blockchain ใน Python
  • คู่มือสำหรับผู้เริ่มต้น: การใช้การเข้ารหัสในสกุลเงินดิจิทัล

มีอีกหนึ่งคุณสมบัติที่ใช้กับวิธีแฮช ข้อมูลชิ้นใดก็ตามจะให้เอาต์พุตแฮชที่เหมือนกัน.

คุณสมบัติเหล่านี้ทำให้มีประโยชน์อย่างมากในสกุลเงินดิจิทัลเช่น bitcoin. 

 


Hashing ทำงานอย่างไร?

เพื่อให้เข้าใจการแฮชได้ดีขึ้นเราต้องเรียนรู้วิธีการทำงานด้วย การแฮชเป็นการดำเนินการทางคณิตศาสตร์ที่ใช้พลังงานในการคำนวณน้อยกว่าในการดำเนินการ อย่างไรก็ตามพลังการคำนวณที่ต้องใช้ในการย้อนกลับนั้นมีค่าใช้จ่ายสูงและด้วยเหตุนี้คอมพิวเตอร์รุ่นปัจจุบันจึงไม่สามารถทำได้.

อย่างไรก็ตามคอมพิวเตอร์ควอนตัมสามารถย้อนกลับการแฮชคอมพิวเตอร์ได้ แต่มีวิธีการแฮชที่ต้านทานควอนตัมอยู่แล้ว.

เพื่อวัตถุประสงค์ในการแฮชมีอัลกอริทึมมากมายที่ใช้ ซึ่งรวมถึงสิ่งต่อไปนี้.

  • ข้อความโดยตรง (MD5)
  • ฟังก์ชัน Secure Hash (SHA1)
  • ฟังก์ชัน Secure Hash (SHA-256)

ไม่ใช่ทุกฟังก์ชันการแฮชที่ปลอดภัย 100% ตัวอย่างเช่น SHA1 แตกง่ายจึงไม่แนะนำให้ใช้งานจริง หนึ่งในฟังก์ชันการแฮชที่ใช้บ่อยที่สุด ได้แก่ MD5 และ SHA-256.

MD5 ส่วนใหญ่จะใช้สำหรับการตรวจสอบไฟล์ที่ดาวน์โหลด ดังนั้นหากคุณดาวน์โหลดไฟล์คุณสามารถคำนวณการตรวจสอบโดยใช้เครื่องคำนวณการตรวจสอบ หากสตริงแฮชตรงกับสตริงของสิ่งที่ผู้ดาวน์โหลดให้มานั่นหมายความว่าการดาวน์โหลดเสร็จสิ้นอย่างถูกต้องโดยไม่มีไฟล์เสียหาย กล่าวโดยย่อคือตรวจสอบความสมบูรณ์ของไฟล์.

 

ส่วนใหญ่ใช้ Hashing ที่ไหน?

การแฮชส่วนใหญ่จะใช้สำหรับรหัสผ่าน เรามาดูตัวอย่างเพื่อทำความเข้าใจกัน.

เมื่อสร้างบัญชีอีเมลผู้ให้บริการอีเมลของคุณจะถามที่อยู่อีเมลและรหัสผ่าน เห็นได้ชัดว่าพวกเขาไม่ได้บันทึกอีเมลและรหัสผ่านเป็นข้อความธรรมดาธรรมดา หากเป็นเช่นนั้นแสดงว่าพวกเขากำลังละเมิดความเป็นส่วนตัวและความปลอดภัยของข้อมูลของคุณ เพื่อให้แน่ใจว่าการถอดรหัสข้อมูลนั้นทำได้ยากพวกเขาจึงใช้ฟังก์ชันแฮชกับรหัสผ่านของคุณเพื่อให้แม้แต่ใครก็ตามที่ทำงานภายในกับผู้ให้บริการอีเมลก็ไม่สามารถถอดรหัสได้. 

ดังนั้นหากคุณพยายามเข้าสู่ระบบในครั้งต่อไปฟังก์ชันแฮชจะถอดรหัสและตรงกับฟังก์ชันที่บันทึกไว้และด้วยเหตุนี้จึงให้สิทธิ์คุณเข้าถึงอีเมลของคุณ.

การใช้งานอื่น ๆ ได้แก่ การสร้างลายเซ็นและการตรวจสอบและการตรวจสอบความสมบูรณ์ของไฟล์.

แน่นอนว่ามีแอปพลิเคชั่นแฮชอื่น ๆ อยู่ที่นั่น การใช้แฮชที่ได้รับความนิยมมากที่สุดอีกอย่างหนึ่งคือ cryptocurrencies ซึ่งเราจะพูดถึงด้านล่าง.

 

วิธีการใช้ Hashing ใน Cryptocurrencies

การแฮชส่วนใหญ่ใช้ในสกุลเงินดิจิทัลเพื่อวัตถุประสงค์ในการขุด ดังนั้นใน Bitcoin การขุดเป็นกระบวนการตรวจสอบฟังก์ชันการแฮช SHA-256 ซึ่งหมายความว่าสามารถใช้แฮชเพื่อเขียนธุรกรรมใหม่อ้างอิงกลับไปยังบล็อกก่อนหน้าและประทับเวลาได้

เครือข่ายได้รับความเห็นพ้องต้องกันเมื่อมีการเพิ่มบล็อกใหม่ในบล็อกเชน การทำเช่นนี้จะตรวจสอบธุรกรรมที่มีอยู่ในบล็อก นอกจากนี้การเพิ่มนี้ยังทำให้ทุกคนไม่สามารถย้อนกลับได้ ทั้งหมดนี้เกิดขึ้นได้เพราะการแฮชและนั่นคือเหตุผลที่ใช้เพื่อรักษาความสมบูรณ์ของบล็อกเชน.

Bitcoin ใช้วิธีฉันทามติ Proof-of-Work ซึ่งในทางกลับกันจะใช้ฟังก์ชันแฮชทางเดียวของ SHA-256.

 

ตัวอย่างฟังก์ชันการแฮช

ตอนนี้เรามาดูตัวอย่างของฟังก์ชันแฮชการเข้ารหัส.

เพื่อให้ง่ายขึ้นสำหรับเราและคุณเราจะใช้เครื่องมือ SHA-256 ออนไลน์ที่มีอยู่.

นี่คือลิงค์สำหรับมัน: SHA256 ออนไลน์

ตอนนี้ถ้าคุณพิมพ์ 101Blockchains เป็นอินพุตมันจะให้ผลลัพธ์ดังต่อไปนี้.

อินพุต: 101Blockchains.com

เอาท์พุต: fbffd63a60374a31aa9811cbc80b577e23925a5874e86a17f712bab874f33ac9

การใช้ฟังก์ชันแฮช SHA256

ตอนนี้ถ้าคุณใส่คำง่ายๆ“ Hello World” เป็นอินพุตก็จะให้ผลลัพธ์ดังต่อไปนี้.

อินพุต: สวัสดีชาวโลก

เอาท์พุต: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

ในผลลัพธ์ทั้งสองคุณจะเห็นว่าทั้งสองค่าเอาต์พุตมีความยาวเท่ากันนั่นคือ 256 บิตนั่นคือความยาว 64 อักขระ.

ตอนนี้เรามาป้อน 101blockchain ในอินพุตกัน สังเกตว่าเราลบ“ s” ออกจาก 101Blockchains ที่ใช้ในการสร้างแฮชแรก.

อินพุต: 101Blockchain

เอาท์พุต: c4d67db72f3d18eaca2e8e8498271de353d25874e4448be4887f2563576c6fe8

หากคุณเปรียบเทียบกับเอาต์พุตแฮชแรกของเราคุณจะเห็นความแตกต่างอย่างมากแม้ว่าเราจะลบตัวอักษรเพียงตัวเดียวออกจากอินพุต.

แล้วสิ่งที่เราเรียนรู้จากตัวอย่าง? ขอสรุปด้านล่าง.

  • เอาต์พุตทั้งหมดมีความยาวเท่ากัน
  • การเปลี่ยนแปลงเล็กน้อยในผลการป้อนข้อมูลในเอาต์พุตที่แตกต่างกันอย่างสิ้นเชิง
  • ไม่สามารถย้อนกลับเอาต์พุตเป็นอินพุตได้.

คุณสมบัติของฟังก์ชันแฮชการเข้ารหัส

เพื่อให้เข้าใจถึงการแฮชหรือการแฮชโดยทั่วไปในการเข้ารหัสได้ดีขึ้นเรามาดูคุณสมบัติของฟังก์ชันแฮชการเข้ารหัส.

มุ่งมั่น

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

คุณสมบัติที่กำหนดมีความสำคัญเนื่องจากทำให้เกิดแนวคิดของฟังก์ชันทางเดียว หากไม่ได้ผลเช่นนั้นจะเป็นไปไม่ได้ที่จะใช้ข้อมูลนี้ในการแฮชข้อมูล นอกจากนี้เอาต์พุตแบบสุ่มสำหรับอินพุตเดียวกันอาจทำให้กระบวนการทั้งหมดไร้ประโยชน์.

 

ทนต่อภาพก่อน

ฟังก์ชันแฮชการเข้ารหัสสามารถป้องกันภาพล่วงหน้าได้ซึ่งหมายความว่าค่าแฮชที่สร้างขึ้นแล้วจะไม่เปิดเผยข้อมูลใด ๆ เกี่ยวกับอินพุต.

นี่เป็นคุณสมบัติที่สำคัญเนื่องจากให้ความสำคัญมาก.

 

มีประสิทธิภาพในการคำนวณ

ฟังก์ชันแฮชมีประสิทธิภาพในการคำนวณ ซึ่งหมายความว่าไม่ว่าอินพุตจะยาวและซับซ้อนแค่ไหนก็จะสร้างเอาต์พุตแฮชได้อย่างรวดเร็ว ยินดีต้อนรับประสิทธิภาพสำหรับบริการที่ต้องการใช้ฟังก์ชันแฮชเพื่อจัดเก็บข้อมูลที่ละเอียดอ่อน อย่างไรก็ตามมันมีประสิทธิภาพในการคำนวณทางเดียวเท่านั้นนั่นคือจากอินพุตไปยังเอาต์พุต เนื่องจากไม่สามารถย้อนกลับได้จึงเป็นไปไม่ได้ที่คอมพิวเตอร์เครื่องใดจะทำวิศวกรรมย้อนกลับได้.

แต่ถ้าคุณต้องการพูดคุยเกี่ยวกับตัวเลขอาจใช้เวลาหลายปีในคอมพิวเตอร์สมัยใหม่ในการเดาอินพุตจากค่าแฮชที่กำหนด นอกจากนี้ด้วยคอมพิวเตอร์สมัยใหม่ที่มีประสิทธิภาพมากขึ้นในแต่ละวันฟังก์ชันแฮชจึงมีประสิทธิภาพมากขึ้นกว่าเดิม.

 

ไม่สามารถย้อนกลับทางวิศวกรรมได้

ฟังก์ชันแฮชไม่สามารถย้อนกลับได้ ซึ่งหมายความว่ามีความปลอดภัย ดังที่คุณควรทราบว่าฟังก์ชันแฮชการเข้ารหัสถูกสร้างขึ้นด้วยหลักฐานของฟังก์ชันที่ไม่สามารถย้อนกลับได้ สมการทางคณิตศาสตร์และกระบวนการที่ใช้ในการสร้างผลลัพธ์ถูกทำให้ง่ายขึ้นและไม่สามารถย้อนกลับได้ ในแง่เทคนิคฟังก์ชันแฮชไม่สนับสนุนการดำเนินการผกผัน.

 

ทนต่อการชน

ความต้านทานการชนเป็นคุณสมบัติสุดท้ายที่เราจะกล่าวถึง คุณสมบัตินี้ทำให้มั่นใจได้ว่าไม่มีอินพุตที่แตกต่างกันสองอินพุตที่สร้างเอาต์พุตเดียวกัน.

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

ข่าวดีก็คือฟังก์ชันแฮชที่เป็นที่นิยมส่วนใหญ่มีคุณสมบัติป้องกันการชนกัน.

 

คลาสแฮชยอดนิยม – รายชื่ออัลกอริทึมการแฮช

สิ่งนี้นำเราไปสู่ส่วนถัดไปซึ่งเราจะพูดถึงคลาสแฮชยอดนิยม เราจะแสดงรายการแฮชสามคลาสที่ค่อนข้างเป็นที่นิยมในแวดวงการเข้ารหัส.

  • ไดเจสต์ข้อความ (MD)
  • ฟังก์ชัน Secure Hash (SHF)
  • RIPE Message Direct (RIPEMD)

มาดูกันทีละเรื่อง.

ไดเจสต์ข้อความ (MD)

Message Digest คือตระกูลของฟังก์ชันแฮชที่ใช้ตลอดประวัติศาสตร์ของอินเทอร์เน็ต.

ตระกูลนี้ประกอบด้วยฟังก์ชันแฮชเช่น MD2, MD4, MD6 และ MD5 ที่เป็นที่นิยมมากที่สุด ฟังก์ชันแฮช MD ทั้งหมดเป็นฟังก์ชันแฮช 128 บิตซึ่งหมายความว่าขนาดไดเจสต์คือ 128 บิต.

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

MD5 ไม่ปลอดภัยเท่ากับฟังก์ชันการแฮชอื่น ๆ ในปี 2547 มีการโจมตีเชิงวิเคราะห์กับฟังก์ชันแฮชซึ่งดำเนินการในเวลาเพียงหนึ่งชั่วโมง ทำได้โดยใช้คลัสเตอร์คอมพิวเตอร์ สิ่งนี้ทำให้ MD ไม่มีประโยชน์ในการรักษาความปลอดภัยข้อมูลและด้วยเหตุนี้จึงใช้สำหรับงานต่างๆเช่นการตรวจสอบความสมบูรณ์ของไฟล์.

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ MD5 โปรดดูหน้าวิกิพีเดียสำหรับ MD5 – นพ. 5.

 

ฟังก์ชัน Secure Hash (SHA)

Secure Hash Functions เป็นฟังก์ชันแฮชอีกตระกูลหนึ่งที่ค่อนข้างได้รับความนิยม ได้รับการพัฒนาและเผยแพร่โดยสถาบันมาตรฐานและเทคโนโลยีแห่งชาติ (NIST) พวกเขาเปิดตัว SHA สี่เวอร์ชัน ได้แก่ SHA-0, SHA-1, SHA-2 และ SHA-3.

อย่างที่คุณน่าจะเดาได้เวอร์ชันที่ใหม่กว่าจะแก้ไขปัญหาหรือจุดอ่อนบางอย่างด้วย SHA เวอร์ชันเก่า ตัวอย่างเช่น SHA-1 ได้รับการเผยแพร่หลังจากพบจุดอ่อนของ SHA-0 SHA-1 เปิดตัวในปี 1995.

SHA-1 สร้างชื่อของตัวเองเมื่อเปิดตัว มันถูกใช้โดยแอพพลิเคชั่นที่หลากหลายในเวลานั้นรวมถึง Secure Socket Layer (SSL).

อย่างไรก็ตามเมื่อเวลาผ่านไปผู้โจมตียังพบเกี่ยวกับการชนกันของ SHA-1 ซึ่งทำให้มันไร้ประโยชน์ NIST มาพร้อมกับฟังก์ชันแฮชที่ปลอดภัยในตระกูล SHA-2 ซึ่งใช้รูปแบบ SHA สี่แบบ ได้แก่ SHA-256, SHA-224, SHA-512 และ SHA-384 ในสี่สายพันธุ์นี้มีสองสายหลัก ได้แก่ SHA-256 และ SHA-512 ความแตกต่างระหว่างพวกเขาคือ SHA-512 ใช้คำ 64 ไบต์ในขณะที่ SHA-256 ใช้คำ 32 ไบต์เท่านั้น. 

ฟังก์ชันแฮชตระกูล SHA-2 ยังคงใช้กันอย่างแพร่หลาย อย่างไรก็ตามยังมี SHA-3 ที่ออกแบบและเผยแพร่โดยนักออกแบบที่ไม่ใช่ NSA ในระหว่างการแข่งขันสาธารณะในปี 2012 ก่อนหน้านี้รู้จักกันในชื่อ Keccak ประโยชน์ของ Keccak ได้แก่ ความต้านทานการโจมตีที่ดีขึ้นและประสิทธิภาพที่มีประสิทธิภาพ.

 

RIPE Message Direct (RIPEMD)

RIPE Message Direct (RIPEMD) เป็นตระกูลของฟังก์ชันแฮชที่เปิดตัวในปี 1992 นอกจากนี้ RIPE ย่อมาจาก RACE Integrity Primitives Evaluation.

ได้รับการออกแบบและจัดการโดยชุมชนการวิจัยแบบเปิด ในตระกูลนี้มีฟังก์ชั่นห้าอย่าง ได้แก่ RIPEMD, RIPEMD-160, RIPEMD-128, RIPEMD-320 และ RIPEMD-256 อย่างไรก็ตามฟังก์ชันที่ใช้บ่อยที่สุดคือ RIPEMD-160.

การออกแบบของ RIPEMD เป็นไปตาม Message Direct.

 

ความแตกต่างระหว่างการแฮชการเข้ารหัสและการใส่เกลือ

ในส่วนนี้เราจะอธิบายสั้น ๆ เกี่ยวกับความแตกต่างระหว่างการแฮชการเข้ารหัสและการใส่เกลือ.

เริ่มต้นด้วยการเข้ารหัสกันเลย.

การเข้ารหัสเป็นกระบวนการในการคัดลอกข้อมูลต้นฉบับโดยใช้คีย์สาธารณะจากนั้นจึงปลดล็อกโดยใช้คีย์ส่วนตัว มันเป็นฟังก์ชั่นสองทาง.

ในทางกลับกันการแฮชเป็นฟังก์ชันทางเดียวที่ใช้ในการช่วงชิงข้อมูลเพื่อวัตถุประสงค์ในการตรวจสอบ.

คำสุดท้ายคือ“ Salting”.

การใส่เกลือจะคล้ายกับการแฮช แต่ที่นี่จะมีการเพิ่มค่าเฉพาะลงในรหัสผ่านเพื่อสร้างค่าแฮชที่แตกต่างกัน ที่นี่ค่าเกลือจะต้องไม่ซ้ำกันและยังคงซ่อนอยู่. 

 

สรุป

สิ่งนี้นำเราไปสู่จุดสิ้นสุดของการแฮชในการเข้ารหัส เราพยายามทำความเข้าใจการแฮชเข้าและออกโดยการเรียนรู้ก่อนว่ามีอะไรนำเสนอจากนั้นเรียนรู้วิธีการทำงานประเภทและอื่น ๆ อย่างรวดเร็ว!

ดังที่คุณเห็นมีกรณีการใช้งานมากมายสำหรับการแฮชรวมถึง cryptocurrency การป้องกันรหัสผ่านการตรวจสอบลายเซ็นและอื่น ๆ แม้ว่าการแฮชจะมีลักษณะเฉพาะในแบบของตัวเอง แต่ประสิทธิภาพในการปกป้องข้อมูลก็ลดน้อยลงในแต่ละวันที่ผ่านไปเนื่องจากคอมพิวเตอร์ที่ทรงพลังทั่วโลก.

นักวิจัยกำลังดำเนินการเพื่อรักษาสภาพที่เป็นอยู่โดยการปล่อยฟังก์ชันการแฮชที่มีประสิทธิภาพมากขึ้นซึ่งทนต่อควอนตัมและสามารถทนต่อความก้าวหน้าของพลังการคำนวณทั่วโลก.

แล้วคุณคิดอย่างไรเกี่ยวกับการแฮช? แสดงความคิดเห็นด้านล่างและแจ้งให้เราทราบ.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map