Pages

10/05/2010

Password Generator using Linux Commands

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

จำได้ว่าตอนที่เคยทำเช็คว่าไฟล์ดาวน์โหลดมาครบรึเปล่า ใน linux มีคำสั่ง md5sum นี่นา
ถ้าเราเอาคำสั่ง นี้มาใช้ hash password เราล่ะ

** hash คือ ฟังก์ชั่นในการรับ อะไรเข้าไปก็ได้ แล้วก็แปลงไปเป็น ตัวอักษรชุดนึง
ซึ่งถ้าเราเอา อะไรก็ได้(ตัวเดิม) ใส่เข้าไปกี่ครั้งก็ตาม  มันก็จะยังมีค่าเหมือนเดิม

ดังนั้นก็เลยลองว่า

ptantiku@ptantiku-desktop:~$ echo -n "123456" | md5sum
e10adc3949ba59abbe56e057f20f883e  -

echo -n "123456"  คือการแสดงข้อความ 123456 ออกทาง standard output โดยไม่ใส่ \n ต่อท้าย
แล้วนำมาไปป์ ต่อให้กับ md5sum  ซึ่งทำตัวเป็น hash function 
ก็จะแปลงข้อความ  123456  ให้กลายเป็น  e10adc3949ba59abbe56e057f20f883e อย่างที่เห็น

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

แล้ว linux มีแค่  check sum แบบเดียวรึเปล่า?
ลองค้นๆดูในเครื่องนี้ ก็เจออยู่หลายนะ
ก็เลยลองเอามาทดสอบ hash ค่า 123456 ดู


ptantiku@ptantiku-desktop:/usr/bin$ ls *sum
cksum      md5sum   sha224sum  sha384sum  shasum
innochecksum  sha1sum  sha256sum  sha512sum sum
ptantiku@ptantiku-desktop:/usr/bin$ for i in *sum ; do echo -n "$i : "; echo -n "123456" | $i; done
cksum : 2743226970 6
innochecksum : InnoDB offline file checksum utility.
usage: innochecksum [-c] [-s [start page]] [-e ] [-p [page]] [-v] [-d] [filename]
	-c	print the count of pages in the file
	-s n	start on this page number (0 based)
	-e n	end at this page number (0 based)
	-p n	check only this page (0 based)
	-v	verbose (prints progress every 5 seconds)
	-d	debug mode (prints checksums for each page)
md5sum : e10adc3949ba59abbe56e057f20f883e  -
sha1sum : 7c4a8d09ca3762af61e59520943dc26494f8941b  -
sha224sum : f8cdb04495ded47615258f9dc6a3f4707fd2405434fefc3cbf4ef4e6  -
sha256sum : 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92  -
sha384sum : 0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454  -
sha512sum : ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413  -
shasum : 7c4a8d09ca3762af61e59520943dc26494f8941b  -
sum : 34920     1
จะเห็นว่า innochecksum คงใส่เป็น stdin ไม่ได้แฮะ ช่างมัน
ยังเหลือ sum อีกหลายแบบให้ใช้
บางคนอาจจะชอบ base64  ก็ลองใช้กันได้
ptantiku@ptantiku-desktop:~$ echo -n "123456" | base64
MTIzNDU2
แค่ว่า password มันจะสั้นๆ เหมือนข้อความที่เราเอาไปใช้นั้นแหละ
บางคนชอบเอาวันที่เกิด มาตั้งเป็นพาสเวิร์ด
งั้นก็เอา Epoch Time เลยดีมะ?  555
** Epoch Time คือ จำนวนวินาที ตั้งแต่ วันที่ 1 มกราคม 1990 จนถึงวันที่เราต้องการ
งั้น Christmas ปีนี้ (วันที่ 25 ธันวาคม ) ก็จะมี epoch time เป็น
ptantiku@ptantiku-desktop:~$ date -d '12/25/2010' +'%s'
1293264000
แค่มันอาจจะเป็นเลขทั้งหมด  ก็เพิ่มตัวอักษรเข้าไปเองจะได้ยากขึ้น
แล้วได้password มั่วสะใจรึยัง??
อยากได้มั่วเข้าไปอีก เรายังสามารถ เอาค่า random จาก /dev/urandom เข้ามาใช้ได้ด้วย
ptantiku@ptantiku-desktop:~$ dd if=/dev/urandom count=1 bs=8
���U  i�1+0 records in
1+0 records out
8 bytes (8 B) copied, 2.64e-05 s, 303 kB/s
dd เป็นคำสั่งdata dump จาก device 
urandom เป็น device ที่จะสร้าง random byte stream ออกมา
bs=8 คือ block size  คือเอามา block ละ 8 bytes  
count=1 คือ เอามาแค่block เดียว
ถ้าเอามาลองจะได้เป็น
ptantiku@ptantiku-desktop:~$ dd if=/dev/urandom count=1 bs=8 | md5sum
1+0 records in
1+0 records out
8 bytes (8 B) copied, 5.0425e-05 s, 159 kB/s
3c4ca5a192f23a718c6f3a4c8159a87e  -
ptantiku@ptantiku-desktop:~$ dd if=/dev/urandom count=1 bs=8 | md5sum
1+0 records in
1+0 records out
8 bytes (8 B) copied, 1.9835e-05 s, 403 kB/s
b6ea8e1323bcf3f31bc6e7554885c020  -
จะเห็นว่ารันสองครั้ง แล้วก็ไม่ได้ค่าเหมือนเดิม  (แน่นอนล่ะ เพราะว่ามัน random)
ก็เอาไว้สำหรับคนอยากได้ password ใหม่ แล้วจะจำค่าใหม่เลยแล้วกัน
เอาให้บ้าเข้าไปอีก...
เอา serial ของเครื่องเลยดีมั๊ย จำได้แน่ๆ เพราะมี sticker แปะอยู่ด้านล่างเครื่อง
หรือจะใช้คำสั่งก็...
ptantiku@ptantiku-desktop:~$ sudo lshw
ptantiku-desktop          
    description: Portable Computer
    product: XPS M1330
    vendor: Dell Inc.
    serial: XXXXXXX
    width: 64 bits
....
คำสั่ง lshw เป็นคำสั่งที่ดูรายละเอียดของ hardware ต่างๆที่อยู่ในเครื่อง ซึ่งก็จะเห็นว่า รวม serial number ของอุปกรณ์ต่างๆ ด้วย
หรือจะลองใช้ cpuid หรือ dmesg เอาก็ได้ มีรายละเอียดให้มั่วเยอะดี
โอ้ MAC address ก็น่าสนใจ  หนึ่งอุปกรณ์เน็ตเวิร์คมีหนึ่ง MAC น่าเอามาใช้ดีเหมือนกัน
ptantiku@ptantiku-desktop:/proc$ ifconfig -a eth0
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
...
อะไรอีกดี...  คิดไม่ออก
ความจริงแล้ว  เวลาเรา login แล้วต้องมานั่งเล่น command บน unix อาจจะยุ่งยากไป
ถ้ายังไง เราจะต้องเปิดbrowser อยู่แล้ว ก็น่าจะหา  คำสั่งอะไรที่รันได้บน browser
คราวนี้พอถึงภาษาที่เล่นบน browser ได้ก็มีไม่กี่แบบ
ลองค้นๆ javascript มาดู
เป็นว่า javascript เหมือนจะไม่มี built-in function ที่สามารถสร้างอะไรมั่วๆได้เลย
มีแค่ function Date.parse ที่จะคำนวน epoch time ออกมาให้เท่านั้นเอง
พอลองกับ firefox ดู
ใส่ 
javascript:alert(Date.parse('12/25/2010'))
เข้าไป ก็ได้ผลออกมาเป็น
ต่างกับ ที่เราใช้คำสั่ง date ใน unix นิดหน่อย ตรงที่มี 0 เพิ่มมาสามตัว
หมายถึง ในbrowser ดันคำนวนหน่วยเป็น milli-second (1วินาที = 1000 ms)
ก็เลยได้ค่าเดิมคูณ 1000
นอกจากนี้ยังหา javascript functions ดีๆไม่ได้เลย (แบบที่ไม่ต้องไปเปิดเวปอื่นๆ หรือใช้โปรแกรมเพื่อคำนวนน่ะนะ)
เอาเป็นว่าแค่นี้ก่อนละกัน

No comments:

Post a Comment