Αυτό το commit περιλαμβάνεται σε:
infl00p 2022-03-23 20:14:33 +02:00
commit 8ec8e9bee2
451 αρχεία άλλαξαν με 46736 προσθήκες και 0 διαγραφές

69
content/articles/28/01_editorial.md Κανονικό αρχείο

@ -0,0 +1,69 @@
+++
title = 'Editorial'
date = '2000-11-01T00:00:00Z'
description = ''
author = 'Βαγγέλης Παπαδογιαννάκης(mailto:papas@hellug.gr)'
issue = ['Magaz 28']
issue_weight = 1
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Μάγκας εν όψη!*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Καλώς ήρθατε στο magaz Νοεμβρίου!
Το τι γίνεται στο περιοδικό μας είναι πρωτοφανές. Τα στατιστικά δείχνουν ότι οι επισκέψεις πληθαίνουν, πράγμα που πάει να πει οτι όλο και περισσότεροι φίλοι του
linux μας επισκέπτονται καθημερινά
Αυτό με τη σειρά του πάει να πει ότι οι ευθύνες μας για σωστή και συνεχή ενημέρωση αυξάνονται. To Magaz έχει ξεφύγει πλέον από τη φάση που ήταν ένα απλό ezine,
φτιαγμένο από linuxάδες που σκοπό είχαν να κάνουν το κέφι τους και να βοηθήσουν την κοινότητα. Έχει πλέον εξελιχθεί σαν η πηγή που (περισσότερο αλλά όχι μόνο)
οι νέοι χρήστες linux αναζητούν λύσεις και προτάσεις που θα τους βοηθήσουν.
Πρέπει το magaz να αλλάξει μορφή, και αυτό είναι το κύριο μέλημά μου αυτή τη στιγμή. Ένα πειραματικό magaz οργανώνεται, και θα είναι έτοιμο σε περίπου δύο
μήνες. Ενδεικτικά να αναφέρω ότι το look θα είναι πολύ πιο καλαίσθητο, και η εργονομία θα είναι από τα σημεία που θα δοθεί πολύ προσοχή. Θέλουμε το magaz να
γίνει ένα μέρος στο οποίο θα μπορείτε άνετα να ψάξετε και να **βρείτε αυτό που ψάχνετε**.
Τα άρθρα θα είναι χωρισμένα και κατηγοριοποιημένα σε ενότητες, με το καθένα από αυτά να έχει κάποιες λέξεις κλειδιά που θα βοηθούν στην αναζήτηση και τη
θεματική κατηγοριοποίηση τους. Θα μπορείτε να ψηφίζετε για το κάθε άρθρο ξεχωριστά, και να βρείτε παρόμοια άρθρα. Οι αρθρογράφοι (επιτέλους) θα καταχωρηθούν και
θα μπορείτε να δείτε όλα τα άρθρα που έχει γράψει κάποιος συγκεκριμένος αρθρογράφος.
Θα μπορείτε να γράφετε τις παρατηρήσεις σας για ένα άρθρο, και να κρίνετε αν είναι βοηθητικό, να συμπληρώνετε, και να βοηθάτε προς μια περισσότερο
\`\`ολοκληρωμένη\'\' εικόνα ενός θέματος.
Θα μπορείτε να δείτε μια \"printer friendly\" έκδοση του κάθε άρθρου ώστε να μπορείτε να το τυπώσετε και επίσης να το κατεβάσετε σε ότι μορφή μπορεί να
υποστηριχτεί από την sgml. Πρακτικά όλες δηλαδή :).
Εκτός αυτού, το περιοδικό θα μπορεί να ανανεώνεται συχνότερα, και όχι πλέον κάθε μήνα. Με αυτό τον τρόπο θα ξεφύγουμε από τα \`\`περιθώρια\'\' του ημερολογιακού
μήνα, και σταδιακά (πράγμα που νομίζω ότι τελικά θα πάρει πολύ καιρό αλλά κάποτε θα γίνει) θα προχωρήσουμε σε ένα magaz που θα έχει νέα και άρθρα (όλα φυσικά
γύρω από το linux) που θα ανανεώνονται ακόμα και καθημερινά (άρθρα να υπάρχουν!). Θα δημιουργηθεί μια mailing list όπου θα μπορείτε να γράφεστε και να λαμβάνετε
email κάθε φορά που θα ανανεώνεται το magaz. Έτσι, όσοι ενδιαφέρονται, θα μπορούν να έχουν μια συνεχή επαφή με τα νέα της Ελληνικής κοινότητας linux.
Πληροφοριακά, το νέο magaz θα χτιστεί σε [PHP4](http://www.php.net) και [MySQL](http://www.mysql.com), και (φυσικά) όλος ο κώδικας θα είναι GPLed.
Φυσικά, κάτι τέτοιο δεν είναι εύκολο να γίνει χωρίς τη βοήθεια από εσάς, όποιοι και αν είσαστε. Πως μπορείτε να βοηθήσετε;
- Στέλνοντας άρθρα προς δημοσίευση. Το θέμα είναι ελεύθερο, αν και καλό θα ήταν να υπάρχει μια συνεννόηση για να αποφεύγονται καταστάσεις όπου πχ δύο άτομα να
γράφουν άρθρο για το ίδιο θέμα. Περισσότερες πληροφορίες για το πως να βοηθήσετε μπορείτε να πάρετε στέλνοντας mail στον
[αρχισυντάκτη](mailto:papas@hellug.gr) του περιοδικού. Να σας υπενθυμίσω εδώ, ότι το magaz είναι το περιοδικό **ΟΛΗΣ** της κοινότητας Linuxάδων της Ελλάδος,
και όχι δικό μου ή του Καμπριάνη ή του Μαυρογιαννόπουλου ή του Παπακώστα ή της Σανίδα ή \... είναι ΟΛΩΝ μας!
- [Στέλνοντας προτάσεις](mailto:papas@hellug.gr) για τη μορφή και το περιεχόμενο του νέου magaz. Τι θα θέλατε να δείτε; Τι θα θέλατε να υπάρχει; Τι ΔΕΝ θα
θέλατε να δείτε;
- [Στέλνοντας παρατηρήσεις](mailto:papas@hellug.gr) για τη μορφή και την εργονομία του νέου magaz.
- Στέλνοντας χρήματα για να αγοράσω επιτέλους αυτή την Porsche (αστειεύομαι).
- Ψηφίζοντας αυτό το μήνα.
Αυτά περί της επερχόμενης αλλαγής. Ας προχωρήσουμε στα θέματα του μήνα\...
- [Xbasic συνέχεια](02_xbasic.html)\... Πολύ καλό sequence από τον [Κώστα Τσακάλογλου](mailto:tsakf@hellug.gr). Διαβάστε το\...
- [linux VS windows](04_linuxvswin.html)\... Από τον [Ευριπήδη Παπακώστα](mailto:evris@hellug.gr). Πολυσηζητημένο; Ίσως. Απλά, μερικές φορές, είναι πολύ
δύσκολο να δούμε τα πράγματα όπως είναι, δηλαδή \`\`ΑΠΛΑ\'\'. Για περάστεεεεε.
- [Ρυθμίσεις](03_rithimis.html)\... Πως να γράψω ένα CD με το linuxι μου; Ένα κατανοητό και συνάμα βοηθητικό άρθρο από τον [Νίκο
Αποστολάκη](mailto:nickapos@agriroot.aua.gr). Επιτέλους, θα χρησιμοποιήσετε το CDR σας, για το λόγο για τον οποίο το αγοράσατε! Να καλωσορίσουμε το Νίκο τον
Αποστολάκη στην παρέα του Magaz, και ας ελπίσουμε να μας ξαναγράψει\... (άρθρο, μην αρπάζεστε)
- [Κρυπτογράφηση](05_passwd.html). Τιιιιι συμβαίνει με αυτό το θέμα; Τι είναι το passwd; Γιατί υπάρχει αυτό το shadow; Μας στοιχειώσανε το μηχάνημα οι σκιές;
Ένα πολύ κατατοπιστικό άρθρο από τον [Νίκο Μαυρογιαννόπουλο](mailto:nmav@hellug.gr), τον αιώνιο μπάκουρο :)
[Μην ξεχάσετε να ψηφίσετε!!!](http://magaz.hellug.gr/cgi-bin/poll28.cgi). Μόνο ψηφίζοντας θα μας βοηθήσετε να σας προσφέρουμε αυτά που πραγματικά θέλετε στο νέο
magaz που έρχεται\...

329
content/articles/28/02_xbasic.md Κανονικό αρχείο

@ -0,0 +1,329 @@
+++
title = 'Xbasic'
date = '2000-11-01T00:00:00Z'
description = ''
author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)'
issue = ['Magaz 28']
issue_weight = 2
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C. Μέρος 4ο*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Σχεσιακοί τελεστές**
--------------------------------------------------
- [1.1 Παραδείγματα χρήσης σχεσιακών τελεστών](#ss1.1)
**2. Η εντολή IF**
-------------------------------------------
**3. Παραδείγματα**
--------------------------------------------
- [3.1 Παράδειγμα 1. Εντολή IF χωρίς ELSE](#ss3.1)
- [3.2 Παράδειγμα 2 Εντολή IF μαζί με ELSE.](#ss3.2)
- [3.3 Επόμενο τεύχος](#ss3.3)
### [1. Σχεσιακοί τελεστές]{#s1}
Οι σχεσιακοί τελεστές της Xbasic χρησιμοποιούνται για να συγκρίνουν μεταβλητές με σταθερές ή μεταβλητές μεταξύ τους. Π.χ. Είναι η τιμή της μεταβλητής x
μεγαλύτερη από 100; Η τιμή της μεταβλητής a είναι ίση με την τιμή της μεταβλητής d;
Αυτοί οι τελεστές μας επιστρέφουν τιμές \$\$TRUE ή \$\$FALSE αντίστοιχα αν η σχέση ισχύει ή όχι.
Παραθέτω παρακάτω ένα πίνακα με τους σχεσιακούς τελεστές που υπάρχουν στην Xbasic.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Μεγαλύτερο >, !<= Το x είναι μεγαλύτερο του y x>y x!<=y
Μεγαλύτερο ή ίσο >=, !< Το x είναι μεγαλύτερο ή ίσο του y x>=y x!<y
Μικρότερο ή ίσο <=, !> Το x είναι μικρότερο ή ίσο του y x<=y x!>y
Μικρότερο <, !>= Το x είναι μικρότερο του y x<y x!>=y
Διάφορο (όχι ίσο) <>, != Το x είναι διάφορο του y x<>y x!=y
Ισο =,== Το x είναι ίσο με το y x=y x==y
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### [1.1 Παραδείγματα χρήσης σχεσιακών τελεστών]{#ss1.1}
- 5 = 1 Είναι το 5 ίσο με το 1; \$\$FALSE
- 5 \> 1 Είναι το 5 μεγαλύτερο από το 1 \$\$TRUE
- 5
- 1 Είναι το 5 διάφορο του 1 \$\$TRUE
### [2. Η εντολή IF]{#s2}
Οι σχεσιακοί τελεστές χρησιμοποιούνται για να γίνονται οι έλεγχοι στις εντολές IF και WHILE που θα μελετήσουμε. Αυτές οι εντολές χρειάζονται για να αποφασίζεται
η εκτέλεση διαφορετικών κομματιών κώδικα, ανάλογα με το αν ισχύουν ή όχι οι σχεσιακοί τελεστές που αναφέρονται στην εντολή IF ή WHILE αντίστοιχα. Από τα
προηγούμενα παραδείγματα είδαμε ότι η εκτέλεση των προγραμμάτων γίνεται με εκτέλεση των εντολών από πάνω προς τα κάτω. Έτσι, η εντολή IF υπολογίζει το
αποτέλεσμα των σχεσιακών τελεστών και εκτελεί το κομμάτι του κώδικα αντιστοιχεί για την κάθε περίπτωση αληθές/ψευδές (\$\$TRUE/\$\$FALSE).
Στην Xbasic η εντολή if μπορεί να έχει τις εξής μορφές:
- IF (σχεσιακός τελεστής.) ΤΗΕΝ (εντολή 1)
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1
- IF (σχεσιακός τελεστής) ΤΗΕΝ (εντολή 1) ELSE (εντολή 2)
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 αλλιώς αν δεν ισχύει (\$\$FALSE) τότε θα εκτελεστεί η εντολή 2
- IF (σχεσιακός τελεστής) ΤΗΕΝ
(εντολή 1
εντολή
εντολη)
END IF
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 και όλες οι υπόλοιπες που ακολουθούν μέχρι το END IF.
- IF (σχεσιακός τελεστής) ΤΗΕΝ
(εντολή 1
εντολή
εντολη)
ELSE
(εντολή 2
εντολή
εντολη)
END IF
Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 και όλες οι υπόλοιπες που ακολουθούν μέχρι το ELSE αλλιώς αν δεν ισχύει ο τελεστής
(\$\$FALSE) τότε θα εκτελεστεί η εντολή 2 και όλες οι υπόλοιπες που ακολουθούν μέχρι το END IF.
### [3. Παραδείγματα]{#s3}
Για να κατανοήσουμε καλύτερα την χρήση των σχεσιακών τελεστών θα δούμε δύο παραδείγματα με την εντολή IF. Στο ένα παράδειγμα θα χρησιμοποιήσουμε την εντολή IF
χωρίς το ELSE και στο επόμενο θα την χρησιμοποιήσoυμε μαζί με το ELSE.
### [3.1 Παράδειγμα 1. Εντολή IF χωρίς ELSE]{#ss3.1}
Ας δούμε όμως μερικά παραδείγματα.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1. '
2. ' ####################
3. ' ##### PROLOG #####
4. ' ####################
5. '
6. PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent
7. VERSION "0.0000" ' version number - increment before saving altered program
8. '
9. ' You can stop the PDE from inserting the following PROLOG comment lines
10.' by removing them from the prolog.xxx file in your \xb\xxx directory.
11.'
12.' Programs contain: 1: PROLOG - no executable code - see below
13.' 2: Entry function - start execution at 1st declared func
14.' * = optional 3: Other functions - everything else - all other functions
15.'
16.' The PROLOG contains (in this order):
17.' * 1. Program name statement PROGRAM "progname"
18.' * 2. Version number statement VERSION "0.0000"
19.' * 3. Import library statements IMPORT "libName"
20.' * 4. Composite type definitions TYPE typename ... END TYPE
21.' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args)
22.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args)
23.' * 7. Shared constant definitions $$ConstantName = literal or constant
24.' * 8. Shared variable declarations SHARED variable
25.'
26.' ****** Comment libraries in/out as needed *****
27.'
28.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT...
29.' IMPORT "xcm" ' Complex library : complex number library (trig, etc)
30.' IMPORT "xst" ' Standard library : required by most programs
31.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs
32.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs
33.'
34. DECLARE FUNCTION Entry ()
35.'
36.'
37.' ######################
38.' ##### Entry () #####
39.' ######################
40.'
41.' Programs contain:
42.' 1. A PROLOG with type/function/constant declarations.
43.' 2. This Entry() function where execution begins.
44.' 3. Zero or more additional functions.
45.'
46.FUNCTION Entry ()
47.STRING in1,in2
48.SSHORT num1,num2
49.in1=INLINE$("Number 1... ")
50.in2=INLINE$("Number 2... ")
51.num1=SSHORT(in1)
52.num2=SSHORT(in2)
53.IF num1=num2 THEN
54. PRINT num1; " = "; num2
55.END IF
56.IF num1>num2 THEN
57. PRINT num1; " > "; num2
58.END IF
59.IF num1<num2 THEN
60. PRINT num1; " < "; num2
61.END IF
62.END FUNCTION
63.END PROGRAM
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**Ανάλυση του παραδείγματος.**\
**Γραμμές 1..45 PROLOG**
Σε αυτό το τμήμα ορίζονται το όνομα του προγράμματος, οι βιβλιοθήκες και οι συναρτήσεις.
**Γραμμές 46..62 Συνάρτηση ENTRY**
Εδώ θα σταθούμε λίγο πιο αναλυτικά για να εξηγήσουμε την λειτουργία του προγράμματος.
**Γραμμές 47,48**\
Εδώ ορίζονται οι τοπικές μεταβλητές που θα χρησιμοποιήσουμε στην συνάρτηση.
**Γραμμές 49..52**\
Εδώ χρησιμοποιούμε την γνωστή πια συνάρτηση INLINE\$ για να πάρουμε το αποτέλεσμα της πληκτρολόγησης των δύο αριθμών από τον χρήστη και ακολούθως με τις εντολές
SSHORT μετατρέπουμε τις αλφαριθμητικές μεταβλητές σε αριθμητικές για να μπορούμε να κάνουμε σωστά τις συγκρίσεις.
**Γραμμές 53..55**\
Γίνεται ο έλεγχος για την ισότητα των δύο αριθμών. Αν ισχύει η ισότητα τότε στην κονσόλα της XBASIC εμφανίζεται το μήνυμα αριθμός1 = αριθμός2. Σε περίπτωση που
οι αριθμοί δεν είναι ίσοι τότε η εκτέλεση του προγράμματος θα προχωρήσει παρακάτω χωρίς να γίνει εκτέλεση της εντολής στην γραμμή 54.
**Γραμμές 56..58**\
Γίνεται ο έλεγχος για την περίπτωση που ο πρώτος αριθμός είναι μεγαλύτερος. Αν αυτό ισχύει,τότε στην κονσόλα της XBASIC εμφανίζεται το μήνυμα αριθμός1 \>
αριθμός2. Αν δεν ισχύει αυτό τότε η εκτέλεση του προγράμματος θα συνεχιστεί παρακάτω χωρίς να εκτελεστεί η γραμμή 57.
**Γραμμές 59..61**\
Γίνεται ο έλεγχος για την περίπτωση που ο πρώτος αριθμός είναι μικρότερος. Αν αυτό ισχύει τότε στην κονσόλα της XBASIC εμφανίζεται το μήνυμα αριθμός1 \<
αριθμός2. Τότε δεν θα εκτελεστεί η γραμμή 60.
Αυτός είναι ο απλός τρόπος να κάνουμε συγκρίσεις και λαμβάνει υπ\' όψιν του όλες τις περιπτώσεις. Έχει όμως ένα μειονέκτημα. Αν οι δύο αριθμοί είναι ίσοι τότε
θα τυπωθεί αριθμός1 = αριθμός2 όμως στην συνέχεια θα γίνουν οι επόμενες συγκρίσεις που δεν χρειάζονται. Έτσι για να βελτιστοποιήσουμε την ταχύτητα εκτέλεσης
χρησιμοποιούμε την εντολή IF μαζί με την ELSE. Παρακάτω θα δούμε πως διαφοροποιείται το πρόγραμμα με την χρήση της ELSE.
### [3.2 Παράδειγμα 2 Εντολή IF μαζί με ELSE.]{#ss3.2}
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1.'
2.' ####################
3.' ##### PROLOG #####
4.' ####################
.
.
.
.
.
37.' ######################
38.' ##### Entry () #####
39.' ######################
40.'
41.' Programs contain:
42.' 1. A PROLOG with type/function/constant declarations.
43.' 2. This Entry() function where execution begins.
44.' 3. Zero or more additional functions.
45.'
46.FUNCTION Entry ()
47.STRING in1,in2
48.SSHORT num1,num2
49.in1=INLINE$("Number 1... ")
50.in2=INLINE$("Number 2... ")
51.num1=SSHORT(in1)
52.num2=SSHORT(in2)
53.IF num1=num2 THEN
54. PRINT num1;" = ";num2
55.ELSE
56. IF num1>num2 THEN
57. PRINT num1;" > ";num2
58. ELSE
59. PRINT num1;" < ";num2
60. END IF
61.END IF
62.END FUNCTION
63.END PROGRAM
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**Ανάλυση του παραδείγματος.**
**Γραμμές 1..45 PROLOG , Γραμμές 46..62 Συνάρτηση ENTRY, Γραμμές 47,48 και οι γραμμές 49..52**
Έχουν την ίδια ακριβώς σημασία με το προηγούμενο παράδειγμα και έτσι δεν θα ασχοληθούμε με αυτές εδώ. Στις γραμμές 53..61 φαίνεται η διαφορά στις εντολές του
παραδείγματος με το προηγούμενο, γι\' αυτό θα σταθούμε λίγο πιο αναλυτικά.
**Γραμμές 53..55**
Στην περίπτωση που οι δύο αριθμοί είναι ίσοι τότε θα εκτελεστεί η γραμμή 54. Η παρουσία του ELSE στην γραμμή 55 που σημαίνει ότι αν δεν ισχύει η ισότητα τότε θα
εκτελεστεί ο κώδικας που βρίσκεται ανάμεσα στις γραμμές 56..61 αναγκάζει το πρόγραμμα να συνεχίσει την εκτέλεση στην γραμμή 62. Με αυτόν τον τρόπο αποφεύγουμε
τις υπόλοιπες συγκρίσεις.
**Γραμμές 56..58**
Αν ο αριθμός1 είναι μεγαλύτερος, τότε θα εκτελεστεί η γραμμή 57. Η παρουσία του ELSE στην γραμμή 58 που σημαίνει ότι αν ο αριθμός1 δεν είναι μεγαλύτερος τότε θα
εκτελεστεί η εντολή στην γραμμή 59 αναγκάζει το πρόγραμμα να συνεχίσει την εκτέλεση .στην γραμμή 61.Έτσι ανάλογα με το αν ο αριθμός1 είναι μεγαλύτερος ή όχι
εκτελείται η γραμμή 57 ή η γραμμη 61 αντίστοιχα.
Για να ανακεφαλαιώσουμε τα παραπάνω επιγραμματικά έχουμε:
**Πρώτο παράδειγμα**
----------------------------------------------------------------------------------------------------------------------------------------------------------------
IF num1=num2 THEN
.
END IF
IF num1>num2 THEN
.
END IF
IF num1<num2 THEN
.
END IF
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Ανεξάρτητα από τις τιμές των μεταβλητών θα εκτελεστούν και οι τρείς συγκρίσεις.
**Δεύτερο παράδειγμα**
----------------------------------------------------------------------------------------------------------------------------------------------------------------
IF num1=num2 THEN
.
ELSE
IF num1>num2 THEN
.
ELSE
..
END IF
END IF
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Εδώ τώρα, ανάλογα με τις τιμές των μεταβλητών θα εκτελεστούν.
- Αν οι δύο αριθμοί είναι ίσοι γίνεται η πρώτη σύγκριση και παραλείπονται τα υπόλοιπα
- Αν ο πρώτος αριθμός είναι μεγαλύτερος τότε γίνονται και οι δύο συγκρίσεις num1=num2 και num1\>num2.
- Αν ο πρώτος αριθμός είναι μικρότερος τότε πάλι γίνονται οι δύο συγκρίσεις num1=num2 και num1\>num2.
Όπως βλέπουμε στο πρώτο παράδειγμα γίνονται πάντα τρεις συγκρίσεις; ενώ στο δεύτερο γίνονται μία ή και δύο. Είναι φανερό πια γιατί προτιμάμε να χρησιμοποιούμε
το ELSE από το να κάνουμε διαδοχικές συγκρίσεις. Γράφουμε μικρότερο και ταχύτερο κώδικα.
### [3.3 Επόμενο τεύχος]{#ss3.3}
Στο επόμενο, θα αναλύσουμε τις συναρτήσεις στην XBasic. Θα πούμε ποιός είναι ο σκοπός τους, πως δημιουργούνται, και πως τις χρησιμοποιούμε. Θα αναλύσουμε επίσης

240
content/articles/28/03_rithimis.md Κανονικό αρχείο

@ -0,0 +1,240 @@
+++
title = 'CD Recording'
date = '2000-11-01T00:00:00Z'
description = ''
author = 'Νίκος Αποστολάκης(mailto:nickapos@agriroot.aua.gr)'
issue = ['Magaz 28']
issue_weight = 3
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Βήματα και μεθόδοι που ακολουθούμε για να γράψουμε ένα cd απο το Linux.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. DISCLAIMER**
--------------------------------------------
**2. Ρυθμίσεις του πυρήνα του Linux για να γράψουμε ένα cd.**
----------------------------------------------------------------------------------------
- [2.1 Η θεωρία](#ss2.1)
- [2.2 Τα modules](#ss2.2)
- [2.3 Ειδικές περιπτώσεις όσον αφορά το module loading and unloading.](#ss2.3)
**3. Δημιουργία και έλεγχος του iso-image.**
-----------------------------------------------------------------------
- [3.1 Δημιουργία του iso-image.](#ss3.1)
- [3.2 Έλεγχος του iso-image.](#ss3.2)
**4. Το κάψιμο του cd.**
---------------------------------------------------
- [4.1 Η εντολή](#ss4.1)
- [4.2 Επεξήγηση παραμέτρων](#ss4.2)
**5. Ειδικές ρυθμίσεις για την εγγραφή multisession cd.**
------------------------------------------------------------------------------------
- [5.1 Γενικά](#ss5.1)
- [5.2 Έλεγχος του προηγούμενου session και δημιουργία του image.](#ss5.2)
- [5.3 Εγγραφή του session](#ss5.3)
**6. Βιβλιογραφία**
----------------------------------------------
### [1. DISCLAIMER]{#s1}
Δεν φέρω καμία ευθύνη για τυχόν ζημίες που θα προκληθούν στο μηχάνημα σας απο την εφαρμογή των παρακάτω. Εάν αποφασίσετε να ακολουθήσετε τα παρακάτω το κάνετε
με δική σας ευθύνη.
### [2. Ρυθμίσεις του πυρήνα του Linux για να γράψουμε ένα cd.]{#s2}
### [2.1 Η θεωρία]{#ss2.1}
Κατ\' αρχάς για να επιτύχουμε την εγγραφή του cd στο Linux πρέπει να ενεργοποιήσουμε την υποστήριξη για SCSI που έχει το Linux. Εάν το cdwriter που έχουμε δεν
είναι SCSI ακόμη και τότε θα πρέπει να ενεργοποιήσουμε το λεγόμενο SCSI emulation.
Η δική μου περίπτωση είναι η δεύτερη.
### [2.2 Τα modules]{#ss2.2}
Εδώ θα ήθελα να αναφέρω ότι όσον αφορά το configuration του πυρήνα προτιμώ να βάζω μέσα στον πυρήνα τα απολύτως απαραίτητα και να φτιάχνω τα υπόλοιπα σαν
modules.
Θεωρούμε ότι έχετε ρυθμίσει τον πυρήνα ώστε να μπορείτε να χρησιμοποιείτε το cdrom και να διαβάζετε iso-9660 filesystems.
Για να ενεργοποιήσουμε το SCSI emulation πρέπει να απαντήσουμε Y ή M στην επιλογή scsi emulation support, στο SCSI generic support επίσης Y ή M και το ίδιο και
στο SCSI cdrom support. Αφότου ενεργοποιήσουμε το SCSI emulation μπορούμε πια να αναφερόμαστε στις IDE συσκευές μας σα να ήταν SCSI.
### [2.3 Ειδικές περιπτώσεις όσον αφορά το module loading and unloading.]{#ss2.3}
#### Eνδιαφέρουσες περιπτώσεις.
Κατά την ρύθμιση του πυρήνα μπορούν να προκύψουν κάποιες ενδιαφέρουσες περιπτώσεις.
- Η πρώτη περίπτωση είναι να έχετε επιλέξει το **SCSI emulation** ώστε να γίνει compile μέσα στον πυρήνα (όχι σαν module). Σε αυτή την περίπτωση αν έχετε
επιλέξει την υποστήριξη για **IDE cd-rom drives** ώστε να γίνει compile μέσα στον πυρήνα τότε δεν θα μπορείτε να χρησιμοποιήσετε το cdwriter για την
εγγραφή cd. Αυτό συμβαίνει γιατί όπως αναφέρεται στο documentation του πυρήνα όταν έχετε επιλέξει υποστήριξη για **IDE cd-rom** και **SCSI emulation** τότε
αυτόματα χρησιμοποιείται το default δηλαδή εδώ το IDE cd-rom. Το ίδιο αποτέλεσμα και για τους ίδιους λόγους θα έχετε και όταν επιλέξετε το **IDE cd-rom
drive support** σαν build-in στον πυρήνα και το **SCSI emulation** σαν module.
- Η δεύτερη περίπτωση είναι να έχετε επιλέξει και στις δύο επιλογές **Module**. Τότε θε πρέπει να παίζετε με τις εντολές **lsmod** , **rmmod** , **insmod** ή
**modprobe** προκειμένου να μπορέσετε να κάνετε load τα modules που χρειάζονται για το **SCSI emulation** και unload τα modules που χρησιμοποιούνται απο το
IDE cd-rom.
- Η τρίτη περίπτωση είναι να έχετε επιλέξει μόνο το SCSI emulation είτε build-in στον πυρήνα είτε σαν module και να έχετε επιλέξει **Module** στο **IDE cd-rom
support**. Σε αυτή την περίπτωση θα βλέπετε όλα τα cd-rom drives σας σαν SCSI και θα μπορείτε να χρησιμοποιείτε το cdwriter άμεσα.
#### Αποτελέσματα
Εάν όλα είναι εντάξει τότε η εντολή **cdrecord -scanbus** μας δείχνει τις SCSI συσκευές που υπάρχουν στο σύστημα. Εγώ προσωπικά έχω δοκιμάσει και τα δύο
τελευταία configurations για σχετικά μεγάλα χρονικά διαστήματα με εξίσου καλά αποτελέσματα όσον αφορά την εγγραφή των cd\'s.
Όταν είχα το configuration μόνο για **SCSI emulation** είχα κάποια προβλήματα στο **audio-ripping** αλλά δεν έχω διαπιστώσει αν γι\'αυτο ήταν υπεύθυνο το
configuration ή το drive μου που είναι αρκετά παλιό και σχετικά προβληματικό.
### [3. Δημιουργία και έλεγχος του iso-image.]{#s3}
### [3.1 Δημιουργία του iso-image.]{#ss3.1}
#### Η εντολή
Φτιάχνουμε το **iso-image** με το **mkisofs**. Η εντολή που δίνουμε είναι η παρακάτω:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
mkisofs -r --o iso-image firstdir/
----------------------------------------------------------------------------------------------------------------------------------------------------------------
#### Επεξήγηση παραμέτρων
- Η παράμετρος **-r** χρησιμοποιείται για να προσθέσει τα **Rockridge extensions** στο iso-image.
- Η παράμετρος **-o** χρησιμοποιείται για να δηλώσει ο χρήστης το όνομα του αρχείου που θα αποθηκευτεί η έξοδος του **mkisofs** δηλαδή το **iso-image**.
- Το **firstdir/** αποτελεί το directory εισόδου του **mkisofs** δηλαδή το directory απο το οποίο το **mkisofs** θα ξεκινήσει να διαβάζει ώστε να δημιουργήσει
το iso-image. Το directory αυτο δεν θα φαίνεται όταν γραφεί το cd και θα αντικατασταθεί απο το root directory του cd.
### [3.2 Έλεγχος του iso-image.]{#ss3.2}
#### Η εντολή
Για να ελέγξουμε εάν το **iso-image** που δημιουργήσαμε είναι αυτο που επιθυμούμε, δεν έχει λάθη κ.τ.λ. χρησιμοποιούμε τα λεγόμενα **loopback devices**. Έτσι η
εντολή που δίνουμε είναι η παρακάτω :
----------------------------------------------------------------------------------------------------------------------------------------------------------------
mount -t iso9660 -o ro,loop=/dev/loop0 iso-image /cdrom
----------------------------------------------------------------------------------------------------------------------------------------------------------------
#### Επεξήγηση παραμέτρων
- Η παράμετρος **-t** δηλώνει τον τύπο του filesystem που θέλουμε να προσαρτήσουμε.
- Η παράμετρος **-o** δηλώνει με τι επιλογές θέλουμε να προσαρτήσουμε το iso-image και σε ποιό loopback device.
- Τέλος προσδιορίζουμε σε ποιό directory θέλουμε να προσαρτήσουμε το **iso-image**.
Αφού προσαρτήσουμε το **iso-image** μπορούμε να πάμε στο directory που επιλέξαμε να γίνει η προσάρτηση και να ελέγξουμε αν όλα είναι εντάξει.
### [4. Το κάψιμο του cd.]{#s4}
### [4.1 Η εντολή]{#ss4.1}
Η εντολή που χρησιμοποιούμε είναι η παρακάτω:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
cdrecord -v -multi -eject speed=2 dev=0,0 iso-image
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### [4.2 Επεξήγηση παραμέτρων]{#ss4.2}
- Η παράμετρος -v χρησιμοποιείται ώστε το **cdrecord** να τυπώνει αναλυτικά το στάδιο στο οποίο βρίσκεται το γράψιμο του cd.
- Η επιλογή **speed=2** δηλώνει την ταχύτητα της εγγραφής.
- Η επιλογή **dev=0,0** δηλώνει την συσκευή μέσω της οποίας θα γίνει η εγγραφή (στο pc μου αυτή είναι η dev=0,0) σε άλλα μηχανήματα θα είναι διαφορετική.
- Η επιλογή **-multi** χρησιμοποιείται για την δημιουργία **multisession cd**.
- Η επιλογή **-eject** χρησιμοποιείται για να γίνει eject μόλις τελειώσει η εγγραφή.
### [5. Ειδικές ρυθμίσεις για την εγγραφή multisession cd.]{#s5}
### [5.1 Γενικά]{#ss5.1}
Παρακάτω περιγράφεται η διαδικασία για την δημιουργία ενός **multisession cd**. Για την εγγραφή του πρώτου session αρκεί η παραπάνω διαδικασία με την επιλογή
**-multi** κατά την εγγραφή του cd.
### [5.2 Έλεγχος του προηγούμενου session και δημιουργία του image.]{#ss5.2}
#### Έλεγχος του προηγούμενου session.
Αρχικά πρέπει να πάρουμε πληροφορίες για το sector που έχει σταματήσει το προηγούμενο session. Η εντολή που χρησιμοποιούμε είναι η παρακάτω:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
cdrecord -msinfo dev=0,0.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Το output της εντολή αυτής είναι δύο αριθμοί της μορφής **xx,yy**.
Εννοείται βέβαια ότι για να πάρουμε αυτές τις πληροφορίες θα πρέπει το cd στο οποίο θα προστεθεί το νέο session να είναι μέσα στο drive.
#### Δημιουργία του image
Για να φτιάξουμε το iso-image χρησιμοποιούμε και πάλι το mkisofs και η εντολή που δίνουμε είναι η παρακάτω
----------------------------------------------------------------------------------------------------------------------------------------------------------------
mkisofs -o cd-image -R --C xx,yy -M /dev/cdwriter firstdir/
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Η επεξήγηση των παραμέτρων της εντολής ακολουθεί παρακάτω:
- Η παράμετρος **-o** καθορίζει το όνομα του αρχείου στο οποίο θα γραφεί το iso image.
- Η παράμετρος **-R** προσθέτει στο **iso image** τα **Rockridge extensions**.
- Η παράμετρος **-C xx,yy** προσδιορίζει δύο αριθμούς. Ο πρώτος αντιστοιχεί στο πρώτο sector number του τελευταίου session του cd στο οποίο θα προστεθεί το
image που θα φτιάξουμε και ο δεύτερος στο πρώτο sector number του νέου session. Οι αριθμοί **xx,yy** δίνονται ακριβώς με την σειρά που βγαίνουν απο το
**cdrecord -msinfo dev=0,0**.
- Η παράμετρος **-M /dev/cdwriter** προσδιορίζει την συσκευή απο την οποία θα διαβαστούν πληροφορίες για το **iso image** στο τέλος του οποίου θα προστεθεί το
**iso image** που εμείς θα δημιουργήσουμε. Στην περίπτωση μας η συσκευή αυτή είναι το cdwriter που στο pc μου είναι η συσκευή **/dev/sr0**.
- Η παράμετρος **firstdir/** έχει περιγραφεί παραπάνω.
#### Έλεγχος του iso image
Η γενική ιδέα του ελέγχου του **iso image** είναι η ίδια όπως και παραπάνω όμως υπάρχει μια μικρή (σχετικά) διαφορά. Έτσι για να μπορέσουμε να ελέγξουμε το
**iso image** θα πρέπει να φτιάξουμε ένα άλλο **iso image** με την παρακάτω εντολή:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
mkisofs -o iso-image1 -R --C xx,0 -M /dev/cdwriter firstdir/.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Η εντολή αυτή είναι η ίδια με την προηγούμενη απλά εδώ το **iso image** θα είναι φτιαγμένο έτσι ώστε το πρώτο του sector number να είναι μηδέν.
Τώρα μπορούμε να το κάνουμε mount κατά τα γνωστά με τις **loopback devices**.
### [5.3 Εγγραφή του session]{#ss5.3}
Η εγγραφή του session γίνεται κατα τα γνωστά με την εντολή :
----------------------------------------------------------------------------------------------------------------------------------------------------------------
cdrecord -v -multi -eject speed=2 dev=0,0 iso-image
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### [6. Βιβλιογραφία]{#s6}
- Το σχετικό howto.
- Τα manuals των εντολών mkisofs, cdrecord, lsmod , rmmod , insmod, modprobe.
- Το documentation του πυρήνα.
- Το Internet.

233
content/articles/28/04_linuxvswin.md Κανονικό αρχείο

@ -0,0 +1,233 @@
+++
title = 'Linux VS Windows'
date = '2000-11-01T00:00:00Z'
description = ''
author = 'Ευριπήδης Παπακώστας(mailto:evris@hellug.gr)'
issue = ['Magaz 28']
issue_weight = 4
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Κοινωνική διάσταση ενός ακύρηχτου πολέμου (ή εναλλακτικά \"Νίκησε και εσύ στα flamewars Linux εναντίον Windows.Μπορείς\").*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Γενικά\...**
----------------------------------------------
**2. Οπλοστάσια**
----------------------------------------------
- [2.1 \...των χρηστών windows](#ss2.1)
- [2.2 \...των χρηστών Linux](#ss2.2)
- [2.3 Προσωπικά](#ss2.3)
**3. Γενικές παραδοχές**
-----------------------------------------------------
- [3.1 Νέο μοντέλο συνεργασίας.](#ss3.1)
- [3.2 Ισα δικαιώματα και ευκαιρίες](#ss3.2)
- [3.3 Μονοπώλια stop](#ss3.3)
- [3.4 Η κλοπή είναι κακό πράγμα](#ss3.4)
- [3.5 Λήξη χρόνου](#ss3.5)
### [1. Γενικά\...]{#s1}
Τον τελευταίο καιρό νοιώθω πως βρίσκομαι σε ένα συνεχές deja-vu (=η αίσθηση πως κάτι το έχεις ξαναζήσει, ξαναβιώσει ακριβώς όπως συμβαίνει τώρα, σαν να βλέπεις
ένα replay από την ζωή σου).
Έχει να κάνει με ένα πολύ συγκεκριμένο θέμα. Την επαναλαμβανόμενη συζήτηση (σε ανύποπτο χρόνο, με διαφορετικούς ανθρώπους, από διαφορετικά μέσα) σχετικά με το
πολύ πιασιάρικο και μοδάτο (τελευταίως) ζήτημα **\"Linux εναντίον Windows\"**.
Πρώτα πρώτα, έχω παρατηρήσει πως το θέμα αυτό απασχολεί ολοένα και περισσότερο στήλες άλλων -ευρύτερης ύλης και γενικότερου προσανατολισμού- περιοδικών (για
παράδειγμα τη στήλη του **Νίκου Δήμου στο RAM** και αποτελεί ένα από τα κύρια θέματα της αλληλογραφίας των αναγνωστών. Οι αναγνώστες νοιώθουν την ανάγκη να
υποστηρίξουν το αγαπημένο τους λειτουργικό (με βάσιμα ή μη επιχειρήματα). Το έντυπο **flamewar** πουλάει. Ο αρθρογράφος έχει έναν εύκολο τρόπο να διακτινίσει
τον εαυτό του σε έναν χώρο (Linux) στον οποίο μέχρι κάποια στιγμή δεν υπήρχε, από την πίσω πόρτα. Η στήλη με μαγικό τρόπο αυτοσυμπληρώνεται και ο αρθρογράφος
της απεμπλέκεται από μέρος της δουλειάς του.
Ομως, η ίδια καρμπόν κατάσταση ισχύει και στις τετ α τετ συζητήσεις με διάφορα άτομα του χώρου (συνήθως κατά τη διάρκεια άπειρων καφέδων). Ομοίως και στο
Internet: ηλεκτρονικές λίστες, web forums, emails. Εδώ τα πράγματα είναι 10 τάξεις μεγέθους πιο επιθετικά και πιο προσβλητικά. Βλέπετε, το mail είναι απρόσωπο
(ίσως και ανώνυμο) και καθένας μπορεί να παρεξηγήσει τους συνομιλητές του.
Στην όλη αυτή \*διαμάχη\* πρωταγωνιστές είναι συνήθως οι νεώτεροι (ηλικιακά αλλά και σε εξοικείωση με τα λειτουργικά) χρήστες Η/Υ.
Μπορώ πλέον να κοιτάξω κάποιον από μακριά και να ξέρω τι θα πει για το θέμα, με ποια σειρά, τι θα απαντήσω, τι θα ανταπαντήσει, πότε να φέρω στην επιφάνεια την
τάδε τεχνική ερώτηση παγίδα, πως θα γλυτώσει. Σε λίγο καιρό, ο καθένας έχει χτίσει ένα τέτοιο οπλοστάσιο και η συζήτηση είναι ακριβώς σαν και αυτές μεταξύ
Παναθηναϊκών και Ολυμπιακών.
Η άποψη του καθενός είναι σεβαστή και πρέπει να να ακούγεται, να υποστηρίζεται (και μάλιστα και με θέρμη). Όμως είναι αληθινά πολύ ρηχό (στα όρια της
γηπεδοποίησης) να εκφυλίζεται η συζήτηση σε τέτοια κλισέ κανάλια που δεν οδηγούν σε εποικοδομητική κατάληξη.
### [2. Οπλοστάσια]{#s2}
### [2.1 \...των χρηστών windows]{#ss2.1}
Από τη μια λοιπόν, έχουμε τους χρήστες των windows που προτάσουν ως όπλα τα εξής:
- Η ευχρηστία των Windows
- η έλλειψη drivers στο Linux
- πρωτόγονα Linux GUIs
- Μόνο στα Windows βρίσκω τα εργαλεία που χρειάζομαι για την δουλειά μου.
- Κλοπή Windows=μαγκιά
- Linux=κόλλημα
- Οι φίλοι, που προμηθεύουν με το παράνομο λογισμικό (άρα και τα Windows τζάμπα είναι
- Windows προεγκατεστημένα και προπληρωμένα (τι κερδίζω;)
- Το Linux είναι για power users, εγώ θέλω να μην ταλαιπωρηθώ για απλές δουλειές.
- Πως θα διαβάζω τα .doc;
- Αν δεν υπήρχαν τα Windows δεν θα ήξερε ο κόσμος πληροφορική.
- Στατιστικά, ρυθμών ανάπτυξης της MS, benchmarks.
### [2.2 \...των χρηστών Linux]{#ss2.2}
Από την άλλη μεριά, οι χρήστες Linux έχουν να λένε:
- Σταθερότητα του Linux.
- Δωρεάν κώδικας και λογισμικό.
- δυνατότητα τροποποίησης.
- Μόνο στο Linux βρίσκω τα εργαλεία που χρειάζομαι για την δουλειά μου.
- Linux=μαγκιά, Windows=αρτηριοσκλήρωση.
- Πριν βγουν τα Windows υπήρχε το Internet, οι εκτυπώσεις βιβλίων, το Desktop Publishing, η επεξεργασία εικόνας, τα γραφικά, το GUI. Τι ακριβώς λοιπόν
προσέφεραν;
- Αν δεν υπήρχαν τα Windows ο κόσμος θα ήξερε Πληροφορική.
- Χιλιάδες στατιστικά, ρυθμών ανάπτυξης του Linux, benchmarks
### [2.3 Προσωπικά]{#ss2.3}
Ως Linuxας φυσικά και θέλω στο τέλος του \"ματς\" το Linux να έχει κερδίσει τις εντυπώσεις. Δεν θέλω όμως να δώσω την μάχη με τεχνικά, οικονομικά και ιστορικά
στοιχεία. (Εδώ που τα λέμε, ουσιαστικά δεν υφίσταται καν μάχη).
Κατ\' εμέ, τέτοιες συζητήσεις θα πρέπει να έχουν εντελώς **άλλο προσανατολισμό**. Κάθε προϊόν που έχει την διάδοση των Windows (τολμώ να πω και του Linux) δεν
μπορεί να εξετάζεται στενά με κριτήρια τύπου \"εγώ κάνω αυτό, μου προσφέρει εκείνο, δεν μπορώ να κάνω το άλλο\" και μόνο, αλλά ευρύτερα με βάση το γενικότερο
κοινωνικό καλό. (Υποστηρίζουμε πως η Πληροφορική είναι η νέα επανάσταση που επηρεάζει κοινωνικοοικονομικά τον κόσμο όλο, έτσι;;).
Σε τέτοια πλαίσια κανείς δεν μπορεί να αρνηθεί μερικά προφανή πράγματα\...
### [3. Γενικές παραδοχές]{#s3}
Ναι, υπάρχουν μερικά προφανή πράγματα, που κανένας δεν μπορεί να τα αρνηθεί
### [3.1 Νέο μοντέλο συνεργασίας.]{#ss3.1}
Η μοναδικότητα του Linux (και όχι μόνο αυτού, γιατί όπως μονοπωλεί τις συζητήσεις, τείνει να πνίξει άλλες υπέροχες προσπάθειες και λειτουργικά) έγκειται στο
ριζικά επαναστατικό τρόπο συνεργασίας, σχεδιασμού, ανάπτυξης, διόρθωσης, διανομής λογισμικού που έχει εδραιώσει. Δεν έχει να κάνει με το αν το προϊόν είναι
καλό. Στην παρούσα φάση μπορεί να είναι χειρότερο ή και καλύτερο από άλλα υπάρχοντα. Το μόνο σίγουρο όμως είναι πως με την εμπλοκή και άλλων ατόμων σε επίπεδο
χρήστη ή κωδικογράφου ή tester μόνο να βελτιωθεί μπορεί.
Χρησιμοποιώντας Linux είτε ως hobby είτε επαγγελματικά συμμετέχετε έστω και εν αγνοία σας σε μια ζωντανή κοινότητα. Ακόμα και να μην μιλήσετε ποτέ με αυτούς
τους ανθρώπους και να μην τους βοηθήσετε συνειδητά, και πάλι συμμετέχετε.
Ίσως κάποιο ποσό από τη διανομή που αγοράσατε να μεταγγίζεται ως δωρεά σε ένα από τα projects της κοινότητας. Ίσως αν απλά κατεβάσατε το CD από το δίκτυο, το
μποτιλιάρισμα στις γραμμές που διαθέτουν να τους κάνει να βρουν πιο γρήγορους τρόπους να το προσφέρουν. Ίσως να ρωτήσατε μια απορία σε μια λίστα και να πήραν
κουράγιο πως προσφέρουν όντως βοήθεια ή να αποθαρρύνθηκαν μια που τσακωθήκατε. Πάντως ο ρόλος σας δεν είναι εντελώς ουδέτερος.
Στην αντίθετη περίπτωση, η κοινωνική σας συνεισφορά είναι για όλους παντελώς ανύπαρκτη. Το αν είσαστε πελάτης του μεν ή του δε καταστήματος δεν αφορά κανέναν
άλλον εκτός από εσάς.
'λλο το να μετέχεις ενεργά σε μια ερασιτεχνική ομάδα ποδοσφαίρου (ακόμα και στην χειρότερη που υπάρχει), να παίζεις μπάλα στο γήπεδο, να κάνεις δωρεές για να
επιβιώσει, να διαθέτεις τα απογεύματά σου κάνοντας τον εμπειροτέχνη προπονητή της και άλλο να είσαι απλά ένα εισιτήριο διαρκείας της μεγάλης κερδοσκοπικής
εταιρείας Μάντσεστερ. Αυτό δεν έχει καμμία κοινωνική προσφορά. Και να έφτασε κάποιος να θεωρεί σκοπό της ζωής του το να υποστηρίζει έναν κερδοσκοπικό οργανισμό
με πάθος αγγίζει τα όρια της αρρώστιας.
**Κοινωνία εναντίον Εταιρείας λοιπόν 1-0.**
### [3.2 Ισα δικαιώματα και ευκαιρίες]{#ss3.2}
**\"Η πληροφορία είναι δύναμη\", \"γνώση προσιτή σε όλους\", \"ίσες ευκαιρίες στην μόρφωση, στην εκπαίδευση\"**. Όλα αυτά τα κλισέ πραγματάκια που κατά καιρούς
πίστεψαν μερικοί, και ίσως να θυσίασαν πολλά για να τα διασφαλίσουν.
Το Linux είναι **ακριβώς αυτό**. Κάθε τι που γράφετε και βγαίνει σε μορφή **GPL** πλέον ανήκει σε όλους. Κάθε αλγόριθμος που επινοήθηκε που κατασκευάστηκε και
που ελευθερώθηκε ως δώρο στην κοινωνία της Πληροφορικής είναι ελεύθερο αγαθό για πάντα. Να το αλλάξουν, να το διαβάσουν, να το πουλήσουν, να το χαρίσουν, να
χτίσουν πάνω του.
Δεν νομίζω ότι κανείς ενδιαφέρεται τώρα πια για το αν πληρώθηκε ο **Πυθαγόρας** ή ο **Ομηρος** ή ο **Μπαχ** για την δουλειά του. Αυτό που μετράει είναι ότι τώρα
**η δουλειά τους υπάρχει για όλους ανεξαιρέτως**. Οχι μόνο για τα μέλη κάποιου prive club.
Δεν μπορεί κάποιος να έχει το δικαίωμα χρήσης του Θεωρήματος του Πυθαγόρα, σε προνομιακή φοιτητική τιμή, ή για δέκα θέσεις εργασίας και ο διπλανός του να
απαγορεύεται να το χρησιμοποιεί. Είναι τρομακτικό κόστος για την κοινωνία να περιμένει έναν ακόμα Μπαχ, για να ξαναεφεύρει παραπλήσια πράγματα σε άλλη τιμή, με
άλλη συσκευασία.
Θα μου πείτε τι άλλη λύση υπάρχει; Πλέον η έρευνα απαιτεί δαπάνη κεφαλαίων που δεν μπορεί κανείς πελάτης να επωμιστεί μεμονωμένα. Γιαυτό και το χαράτσι ανά
κεφάλι, ανά μήνα, ανά upgrade, ανά ηλικία, ανά προϊόν.
Ευτυχώς πολύς κόσμος έχει επιχειρήματα για το ακριβώς αντίθετο.
Πρώτον η ύπαρξη του **δωρεάν free λογισμικού** (που τις περισσότερες φορές είναι ποιοτικά τουλάχιστον συγκρίσιμο) αποδεικνύει πως το κόστος δεν είναι και τόσο
μεγάλο. Δεύτερον, κανείς δεν είπε να μην πληρωθεί κάποιος για την δουλειά του.
**Σενάριο 1:** η πρώτη ομάδα πελατών που και πραγματικά χρειάζεται το προϊόν επωμίζεται πλήρως το κόστος. Μετά το πέρας κάποιου διαστήματος (ώστε και οι πελάτες
να κάνουν με την σειρά τους την απόσβεσή τους) ο κώδικας απελευθερώνεται και γίνεται κτήμα όλων.
**Σενάριο 2:** Το κόστος μοιράζεται σε όλους **από την αρχή, εφάπαξ**. Οργανωμένα, μέσω sites χρηματοδότησης ανάπτυξης λογισμικού το κόστος αναλαμβάνει η
κοινότητα. Οι developers πληρώνονται ακριβώς όσο κοστολόγησαν την δουλειά τους, και αυτή είναι πλέον διαθέσιμη σε όλους.
Οικονομία δυνάμεων λοιπόν, μυαλών, κεφαλαίων, αποδέσμευση από απίστευτους περιοριστικούς όρους, ίσες ευκαιρίες και έχουμε ένα εύκολο **Κοινωνία εναντίον
Εταιρείας 2-0 στον αιφνιδιασμό.**
### [3.3 Μονοπώλια stop]{#ss3.3}
Οι μονοπωλιακές καταστάσεις είναι επιβλαβείς για την οικονομία και την κοινωνία. Η εξήγηση είναι προφανής για τον αναγνώστη μας\...
Η προστασία μας είναι και κρατικό ζήτημα (αν το Χ κράτος το αποφασίσει και μπορεί να το επιβάλλει σε εύλογο διάστημα). Καλό θα ήταν όμως να υπάρχουν και άλλες
εναλλακτικές ασφαλιστικές δικλείδες. Δεν πρέπει ο κόσμος να εξαρτάται αποκλειστικά από το αν κάποιος δικαστής υποχρεώσει (λίγο πριν τις καλοκαιρινές του
διακοπές) κάποια εταιρεία να διχοτομηθεί και να αναρτήσει άλλη ταμπέλα, αριστερά και δεξιά μιας νοητής διαχωριστικής γραμμής εντός του κτηρίου της.
Με το Linux πλέον φαίνεται πως o κίνδυνος μονοπώλιου ελαχιστοποιείται. Όποιος θέλει μπορεί πάντα να έχει πρόσβαση σε ένα λειτουργικό σύστημα και κάποιες
εφαρμογές. Μπορεί πάντα να διαβάσει και να μάθει από τον κώδικα του πως είναι αυτά τα λειτουργικά. Δεν είναι κάποιο κρυφό μαγικό φίλτρο του Φύλαρχου του χωριού.
**Κοινωνία εναντίον Εταιρείας 3-0 με καταπληκτικό ψαλιδάκι.**
### [3.4 Η κλοπή είναι κακό πράγμα]{#ss3.4}
Συνήθως αυτό υποστηρίζουν τα έννομα κράτη. Το δικαστήριο, οι νομοθετικές αρχές και οι αστυνομικές αρχές δαπανούν πολύ από το χρόνο και τους πόρους τους πάνω σε
αυτήν την κατεύθυνση.
Η χώρα μας έχει ακόμα μια θλιβερή επίδοση στη διάδοση του παράνομου λογισμικού (νομίζω έρχεται πρώτη σε Ευρωπαϊκό επίπεδο). Η BSA είναι ένας οργανισμός που δρα
υποβοηθητικά στην πάταξη της κλοπής προϊόντων λογισμικού. Σε συνεργασία με τις εισαγγελικές αρχές προσπαθεί να προασπίσει τα συμφέροντά των μελών και πελατών
της (η **MS** όπως και πολλές άλλες εταιρείες λογισμικού είναι τέτοιοι).
Το παράδοξο εδώ είναι το εξής. Ενώ σε οποιαδήποτε περίπτωση στην οποία ήσασταν μάρτυρας μιας κλοπής αυτοκινήτου το πιθανότερο είναι να τηλεφωνούσατε στην
αστυνομία και να το αναφέρατε, στην κλοπή λογισμικού αλλάζουν ως δια μαγείας οι παράμετροι. Ακόμα και με την αμοιβή -σύλληψης μέσω επώνυμης καταγγελίας- της BSA
(1 εκατ. δρχ, η περιβόητη ολοσέλιδη διαφήμιση στο ΒΗΜΑ) δεν φαίνεται τόσο αυτονόητο και δελεαστικό να καταδείξει κανείς τον κλέφτη.
Αλλά και να τον καταδείξει, αν οι αριθμοί που ικάζονται για το κλεψίτυπο λογισμικό είναι σωστοί τι θα γίνει;
Θα γίνονται αθρόες έρευνες με εισαγγελική παρουσία και προσαγωγές ανήλικων, μαθητών, φοιτητών, οικογενειαρχών, δασκάλων, παπάδων, γιατρών; Θα δημιουργηθεί μια
νέα τάξη δισεκατομμυριούχων επαγγελματιών καταδοτών επί αμοιβή; Δύσκολο\...προσωπικά πιστεύω πως το όπλο αυτό ενεργοποιείται εκλεκτικά κατά μεγαλοπελατών ως
**μέτρο εκφοβισμού και παραδειγματισμού στις μάζες**. Έχουμε λοιπόν το παράδοξο της εταιρείας που (δικαιωματικά ομολογουμένως) τρομοκρατεί εχθρούς/κλέφτες ώστε
να γίνουν μελλοντικοί φίλοι/πελάτες.
Υπάρχει φαντάζομαι μια εύκολη δικαιολογία πάνω στην κλοπή εμπορικού λογισμικού που πολλοί ήδη έχουν χρησιμοποιήσει σε αντίστοιχες συζητήσεις. \"Το χρειαζόμουν
αλλά τόσο που το χρεώνουν σιγά μην το αγοράσω, άλλωστε δεν στοιχίζει τίποτα η αντιγραφή ενός CD, άυλο και ανέξοδο είναι, δεν είναι πως έκλεψα και κάτι που
κοστίζει πραγματικά λεφτά\".
Είναι τόσο βαθιά ανήθικη, ανώριμη και διαβρωτική αυτή η δήλωση που είναι τρομακτική.
**Πρώτον**, αν χρειάζεσαι κάτι το πληρώνεις. Αλλιώς δεν μπορείς να το έχεις (όπως και πολλά άλλα πράγματα στην ζωή). Δεν τίθεται εδώ θέμα πραγματικής απειλής
της ίδιας της ύπαρξης του ανθρώπου (όπως είναι η κλοπή φαγητού για να μην λοιμοκτονήσει). Αν θέλει κάποιος να σταδιοδρομήσει επαγγελματικά σε ένα χώρο που ο
απαραίτητος εξοπλισμός είναι πέραν δυνατοτήτων, έχει κάνει λάθος εκτίμηση. Ας αλλάξει δουλειά.
**Δεύτερον**, πολλές φορές υπάρχει **δωρεάν εναλλακτική λύση**. Ίσως και χειρότερη. Αλλά που δεν οδηγεί στην κλοπή.
**Τρίτον**, το πόσο κοστίζει κάτι **δεν καθορίζεται από το πόσα λεφτά θα ήθελε κάποιος να διαθέσει, αλλά για πόσα το αποχωρίζεται ο παραγωγός του**. Από την
στιγμή που δεν εισέπραξε τα λεφτά του έχει ζημίες και διαφυγόντα κέρδη και τα δικαιούται.
**Τέταρτον**, τι περιθώρια επιβίωσης αφήνει η κλοπή λογισμικού και μάλιστα πολυσύνθετου (όπως ένα λειτουργικό) στον προγραμματιστή/συγγραφέα ενός προγράμματος
ΠΡΟΠΟ σε C; Ποιός θα αγοράσει 100 χιλ. δρχ το προγραμματάκι αυτό, όταν δεν δίστασε να κλέψει 500Mbyte λογισμικού Πολυεθνικών Εταιριών αξίας 3 εκατ. δρχ; Γιατί
να μην το κλέψει επίσης;
Δεν χρειάζεται να πω πάλι πως από κοινωνικής πλευράς το Linux δρα εξυγιαντικά, χαρίζοντας στον κόσμο την δυνατότητα να μείνει εκτός φυλακής, χωρίς την ρετσινιά
του κλέφτη και τελικά με τα λεφτά του στην δική του και μόνο τσέπη.
Καταπληκτικό σουτ-γκολ από την σέντρα και **Κοινωνία εναντίον Εταιρείας 4 - 0**
### [3.5 Λήξη χρόνου]{#ss3.5}
Κάπου εδώ πρέπει να σφυρίξουμε και την λήξη αυτού του ματς. Αναπληρωματικοί παίκτες όπως \"Διαρροή συναλλάγματος\", \"Διαφάνεια, Ασφάλεια, Κρατικά Συμφέροντα\",
\"Μελλοντική σιγουριά κάλυψης αναγκών ζωτικής σημασίας για μικρά κράτη (γλώσσα, ελληνικοποιήσεις, παιδεία)\" δεν χρειάστηκε καν να μπουν στον αγώνα.
Θυμίζω πως δεν υπάρχει λόγος να γίνει κάποιος φίλαθλος, οπαδός, και πόσο μάλλον παίχτης. Αλλά αν, στο καφενείο, πρέπει να έχει έναν λόγο να τσακώνεται με
κάποιους άλλους, να εκτονώνεται, να περνάει ευχάριστα η ώρα, ας το κάνει. Απλά ας διαλέξει τους σωστούς λόγους να δώσει την μάχη και ας πάει με την ομάδα που,

198
content/articles/28/05_passwd.md Κανονικό αρχείο

@ -0,0 +1,198 @@
+++
title = 'Password encoding in UNIX systems'
date = '2000-11-01T00:00:00Z'
description = ''
author = 'Νίκος Μαυρογιαννόπουλος'
issue = ['Magaz 28']
issue_weight = 5
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Password encoding σε UNIX συστήματα, τι είναι, τι εναλλακτικές λύσεις έχουμε, και άλλες πληροφορίες.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Τι είναι το Password encoding;**
--------------------------------------------------------------
**2. DES Password Encoding**
-----------------------------------------------------
**3. MD5 crypt**
-----------------------------------------
**4. Blowfish crypt (bcrypt)**
-------------------------------------------------------
**5. Cracking Passwords**
--------------------------------------------------
**6. Συμπεράσματα και γεγονότα**
---------------------------------------------------------
**7. Παραπομπές**
------------------------------------------
### [1. Τι είναι το Password encoding;]{#s1}
Τα UNIX συστήματα μιας και είναι πολυχρηστικά, χρειάζονται κάποιο τρόπο για να ξεχωρίζουν τους χρήστες. Ο κάθε χρήστης διαθέτει ένα μοναδικό αριθμό (user id),
το οποίο αντιστοιχεί σε κάποιο όνομα χρήστη (username). Οι παραπάνω αντιστοιχίες καθορίζονται στο αρχείο \"/etc/passwd\", ονομασμένο έτσι για ιστορικούς λόγους.
Μια καταχώριση στο αρχείο αυτό θα μπορούσε να είναι:
nmav:x:500:4:Nikos Mavroyanopoulos:/home/nmav:/bin/bash
\
Τα πεδία σε αυτό το αρχείο ξεχωρίζουν απο την ανω-κάτω τελεία \':\', ενώ τα πεδία που μας ενδιαφέρουν είναι το 1 που περιέχει το όνομα χρήστη - nmav - καθώς και
το πεδίο 3 όπου αναφέρεται η ταυτότητα του χρήστη - 500.
Τα περισσότερα UNIX σύστηματα, για να πιστοποιήσουν την ταυτότητα του χρήστη χρησιμοποιούν συνθηματικές λέξεις, ή απλώς συνθηματικά (passwords). Αυτά τα
συνθηματικά αλλάζουν με την εκτέλεση του \"/usr/bin/passwd\" προγράμματος, το οποίο ανανεώνει τη βάση συνθηματικών του συστήματος. Σε απλά συστήματα αυτή η βάση
είναι ένα εκτυπώσιμο αρχείο, και στα περισσότερα παλαιά συστήματα αυτό ήταν το ίδιο το \"/etc/passwd\". Στα πιο νέα συστήματα είναι ένα αρχείο αναγνώσιμο μόνο
απο τον διαχειριστή του συστήματος, και συνήθως είναι το \"/etc/shadow\".
Αντίθετα με αυτό που θα περίμενε κανείς, η βάση συνθηματικών του συστήματος δεν περιέχει τα ίδια τα συνθηματικά. Τα συνθηματικά κωδικοποιούνται μέσω ενός
αλγορίθμου μίας φοράς ( [1](05_passwd-7.html#1)) και αποθηκεύονται. Με αυτόν τον τρόπο δεν μπορεί ούτε ο διαχειριστής του συστήματος να δει τα συνθηματικά των
χρηστών (μπορεί όμως να τα αλλάξει). Μιας και τα συνθηματικά δεν υπάρχουν στην βάση ίσως να αναρωτηθήτε πως γίνεται η πιστοποίηση του χρήστη. Αν υποθέσουμε ότι
ο αλγόριθμος μίας φοράς είναι PW(x), με x να είναι το συνθηματικό, τότε κατά την εισαγωγή του συνθηματικού(x) το σύστημα αρκεί να υπολογίσει πάλι το PW(x) και
να το συγκρίνει με το αποθηκευμένο στην βάση.
### [2. DES Password Encoding]{#s2}
Τα πρώτα UNIX συστήματα κωδικοποιούσαν τα συνθηματικά χρησιμοποιώντας ένα τροποποιημένο DES αλγόριθμο, με τετοιο τρόπο έτσι ώστε να μην μπορεί απο την
κωδικοποιημενη μορφή να προκύψει το αρχίκο συνθηματικό. Ο μόνος τρόπος για να προκύψει το αρχικό συνθηματικό είναι η δοκιμή όλων των δυνατών συνδιασμών
συνθηματικών (η διαδικασία αυτή συχνά καλείται brute force attack). Αυτό το είδος επίθεσης, ενώ αρχικά ήταν πρακτικά αδύνατο να εφαρμοστεί, τα τελευταία χρόνια,
με την πρόοδο των υπολογιστών, μπορεί να εφαρμοστεί χωρίς ιδιαίτερα ακριβό εξοπλισμό. Ενα τυπικό UNIX έχει καταχώρισεις στο \"/etc/shadow\" της μορφής:
nmav:ZKZ/wHem5Uv:11000:0:99999:7:::
\
Το δευτερο πεδίο περιέχει μια εκτυπώσιμη μορφή του DES encoded συνθηματικού. Τα δύο πρώτα του ψηφία είναι η εκτυπώσιμη μορφή ενός τυχαίου salt που αποτελείται
απο 12 bits ( [2](05_passwd-7.html#2)). Χρησιμοποιείται ώστε να διαφοροποιεί την έξοδο του αλγορίθμου, ακόμα και σε ίδια συνθηματικά. Ενα συνθηματικό μπορεί να
αποθηκευτεί με 212 τρόπους το πολύ.
Ο αλγόριθμος DES (Data Encryption Standard) είναι κρυπτογραφικός αλγόριθμος που λειτουργεί με 64 bit μπλοκ. Ήταν πρότυπο τις δεκαετίες του \'70 και \'80, αλλά
είναι ξεπερασμένος σήμερα. Ο τρόπος με το οποίο χρησιμοποιείται είναι:
- εκκίνηση του DES
- Μετατροπή του Expansion Permutation συναρτήσει του salt
- Κρυπτογράφηση για 25 φορές 8 null bytes χρησιμοποιώντας σαν κλειδί το συνθηματικό του χρήστη
- Το τελικό αποτέλεσμα είναι η εκτυπώσιμη μορφή των κρυπτογραφημένων 64 bit μαζί με τα 12 bit του salt.
Ο παραπάνω αλγόριθμος είναι ουσιαστικά αλγόριθμος μιας φοράς, αφού δεν υπάρχει τρόπος αντιστροφής της διαδικασίας και εξαγωγής του συνθηματικού απο την
κωδικοποιημένη μορφή, χωρίς να δοκιμάσουμε όλους τους δυνατούς συνδυασμούς. Έχει το λιγότερο, την ασφάλεια του DES, αλγόριθμου δοκιμασμένου για αρκετά χρόνια.
Ένας περιορισμός που έχει είναι ότι τα συνθηματικά περιορίζονται στους 8 χαρακτήρες από τους οποίους χρησιμοποιούνται τα 56 bits (λόγω του μικρού ευρους
κλειδιών του DES).
Μιας και τα E-boxes του DES είναι σταθερά ανά salt, είναι δυνατό με κάποιο δυνατό υπολογιστή να δοκιμάσουμε όλα τα πιθανά συνθηματικά σε λογικό χρόνο. Ο DES
όπως είδαμε χρησιμοποιεί μόνο 56 bits για κλειδί οπότε όλοι οι πιθανοί συνδιασμοί που πρέπει να δοκιμάσει κανείς είναι 256, αριθμός οχι υπερβολικά μεγάλoς.
Έτσι ενώ αρχικά τα κωδικοποιημένα συνθηματικά αποθηκεύονταν στο \"/etc/passwd\", αρχείο αναγνώσιμο απο όλους τους χρήστες του συστήματος, τα τελευταία χρόνια
μεταφέρθηκαν σε ειδικό αρχείο αναγνώσιμο απο τον διαχειριστή μόνο του συστήματος. Αυτό η κίνηση φανέρωσε την αδυναμία του αλγορίθμου κωδικοποίησης να
προστατέψει αποτελεσματικά τα συνθηματικά των χρηστών.
### [3. MD5 crypt]{#s3}
Λύση στο παραπάνω πρόβλημα και στο ότι ο DES είναι κρυπτογραφικός αλγόριθμος και υπήρχε παλαιότερα δυσκολία εξαγωγής του από τις Η.Π.Α, κυρίως για τα μη
εμπορικά UNIX λειτουργικά, έδωσε ο Paul-Henning Kamp για το FreeBSD λειτουργικό. Σχεδιάσε ένα αλγόριθμο κωδικοποίησης συνθηματικών βασισμένο στον MD5 (
[3](05_passwd-7.html#3)) hash αλγόριθμο. Ο MD5 είναι απο τον σχεδιασμό του μίας φοράς (one-way), οπότε οι μετατροπές σε αυτόν ήταν μικρές, ενώ προστέθηκε salt
απο 12 μέχρι 48 bits.
Ο αλγορίθμος αυτός σε γενικές γραμμές κωδικοποιεί το salt και το συνθηματικό, με τον MD5, με αρκετούς διαφορετικούς τρόπους, έτσι ώστε να καθυστερήσει την
διαδικασία. Ο MD5 αλγόριθμος παράγει ένα 128 bit hash και αφού μετατραπεί σε εκτυπώσιμη μορφή μαζί με το salt αποθηκεύεται στο αρχείο συνθηματικών. Ενα τυπικό
σύστημα με MD5 κωδικοποιημένα συνθηματικά θα έχει καταχωρίσεις στο /etc/shadow της μορφής:
nmav:$1$4Wcrq7pj$l8uWovJXI1QBP6MXRrWdt0:11000:0:99999:7:::
\
Οι χαρακτήρες \'\$1\$\' καθορίζουν τον συγκεκριμένο αλγόριθμο που χρησιμοποιείται (versioning) και μιας και η DES κωδικοποίηση δεν χρησιμοποιεί τον χαρακτήρα
\'\$\', δεν είναι πρόβλημα για ένα πρόγραμμα να τα διακρίνει. Το salt ξεχωρίζει απο την έξοδο του MD5 με τον χαρακτήρα \'\$\'.
O MD5 δεν έθετε πρακτικούς περιορισμούς στο μέγεθος του συνθηματικού του χρήστη. Είχε όμως το πρόβλημα του DES encoding\... έχει συγκεκριμένη πολυπλοκότητα και
κάποια στιγμή στο μέλλον θα ήταν εφικτή η brute force attack και σε αυτόν, άρα θα έπρεπε να αντικατασταθεί και πάλι.
### [4. Blowfish crypt (bcrypt)]{#s4}
Την λύση σε αυτή την αδυναμία δίνει ένας αλγόριθμος σχεδιασμένος απο τον Niels Provos και τον David Mazieres για το OpenBSD σύστημα. Ο αλγόριθμος αυτός είναι
βασισμένος στον blowfish ( [4](05_passwd-7.html#4)) αλγόριθμο, με εκθετικά μεταβαλλόμενη πολυπλοκότητα O (2n), και το n καθορίζεται απο τον διαχειριστή του
συστήματος. Ο τροποποιημένος αλγόριθμος καλείται eksblowfish, ή πιο αναλυτικά Expensive Key Schedule Blowfish.
Η επιλογή του blowfish έγινε λόγω του ότι διαθέτει s-boxes εξαρτώμενα από το κλειδί, και συνεπώς έχει πολύ μεγαλύτερη πολυπλοκότητα, κατά την εκκίνηση του, από
τον DES αλγόριθμο. Επιπρόσθετα έχει πολύ μεγαλύτερο εύρος κλειδιών (448 bits), κάτι που δεν θέτει πρακτικούς περιορισμούς στο μέγεθος των συνθηματικών (55
bytes).
Ο eksblowfish χρησιμοποιεί μια τροποποιημένη μορφή της δημιουργίας των s-boxes του αλγορίθμου, και ένα 128 bits salt. Σε γενικές γραμμές η λειτουργία του
αλγορίθμου συνοψίζεται στο:
- Εκκίνηση του Blowfish (δημιουργία των s-boxes)
- Από 1 μέχρι 2n τροποποίηση των s-boxes και των sub-keys συναρτήσει του salt και συναρτήσει του κλειδιού
- Κρυπτογράφιση 64 φορές, μιας αλυσίδας χαρακτήρων (192 bits) με το κλειδί
Το κωδικοποιημένο string είναι η εκτυπώσιμη μορφή του salt και της εξόδου του αλγορίθμου. Ενα σύστημα με Bcrypt κωδικοποιημένα συνθηματικά θα έχει καταχωρίσεις
στο /etc/shadow της μορφής:\
nmav:$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui:11000:0:99999:7:::
\
Οπως παρατηρούμε και αυτός ο αλγόριθμος χρησιμοποιεί τους πρώτους χαρακτήρες (\'\$2a\$\'), του κωδικοποιημένου συνθηματικού για να δείξει την έκδοση του
αλγορίθμου, ενώ πάλι ο χαρακτήρας \'\$\' χρησιμοποιείται σαν σημείο διαχωρισμού πεδίων. Το πρώτο πεδίο όπως είδαμε περιέχει την έκδοση του αλγορίθμου, το
δεύτερο το μέγεθος του κόστους(n), ενώ το τρίτο περιέχει το 128 bits salt και το κωδικοποιημένο συνθηματικό.
Μια πρόχειρη υλοποίηση του bcrypt, καθώς και ένα patch για το Linux pam\_unix module, βρίσκεται στο <http://members.hellug.gr/nmav/bcrypt>. Στο
<http://www.openbsd.org>, μπορούν να βρεθούν περισσότερες πληροφορορίες για τον αλγόριθμο, καθώς και η αρχική υλοποίηση του.
### [5. Cracking Passwords]{#s5}
Η αδυναμία του DES encoding, να προσαρμοστεί στον χρόνο και στην συνεχώς αυξανόμενη υπολογιστική δύναμη, προκάλεσε την δημιουργία προγραμμάτων που προσπαθούσαν
απο την κωδικοποιημένη μορφη να παράξουν το συνθηματικό σε σχετικά μικρό χρόνο. Τα προγράμματα αυτά ονομάστηκαν password crackers, και βασίζοντουσαν στην χαλαρή
επιλογή συνθηματικών απο τους χρήστες, αλλά καθώς το υλικό βελτιωνώταν, το «σπάσιμο» ενός όχι πολυ σύνθετου συνθηματικού έγινε εφικτό. Αρχικά βασίζονταν κυρίως
σε κάποιο λεξικό που κρατάει συνθηματικά που επιλέγαν πιο συχνά οι χρήστες (dictionary attack). Πιο τελευταία προγράμματα χρησιμοποιούν αρκετά πιο εξελιγμένες
τεχνικές.
Μερικά προγράμματα είναι:
- John the Ripper του \"Solar Designer\"
- QCrack του \"Crypt Keeper\"
- Crack του Alec Muffett
Μια ενδιαφέρουσα ερευνα για τις cracking εφαρμογές και την αποδοσή τους έγινε από τον Kurt Hockenbury και μπορεί να βρεθεί στο
<http://attila.stevens-tech.edu/~khockenb/crypt3.html>. Στο κείμενο αυτό παρουσιάζεται η αναποτελεσματικότητα του DES σε συνθηματικά με λιγότερους απο 6
χαρακτήρες και σε ορισμένες μορφές συνθηματικών με 8 χαρακτήρες, ενώ το hardware που χρησιμοποιήθηκε είναι εύκολα προσβάσιμο απο οποιονδήποτε φοιτητή στο
πανεπιστήμιο του.
### [6. Συμπεράσματα και γεγονότα]{#s6}
Γενικά οι περισσότεροι διανομείς και εταιρίες παραγωγής UNIX χρησιμοποιούν ακόμα την DES κωδικοποίηση, αν και ξεπερασμένη, για λόγους συμβατότητας. Αυτοί οι
λόγοι συνήθως προκύπτουν όταν διαφορετικά συστήματα διαμοιράζονται αρχεία συνθηματικών πχ. με NIS ή NIS+. Ακόμα χειρότερα, μερικές εταιρίες ακόμη χρησιμοποιούν
την παλιά μορφή του \"/etc/passwd\", που περιέχει το κωδικοποιημένο συνθηματικό.
Η \'bcrypt\' κωδικοποίηση δεν χρησιμοποιείται, μέχρι σήμερα, σε άλλα λειτουργικά πέρα απο το OpenBSD, κυρίως επειδή χρησιμοποιεί κρυπτογραφικό αλγόριθμο με
μεγάλο εύρος κλειδιών, οπότε και η εξαγωγή απο τις Η.Π.Α (στις οποίες έχουν την έδρα τους οι περισσότερες επιχειρήσεις) δεν ήταν μέχρι πρόσφατα, νόμιμη.
Ορισμένα συστήματα, όπως το QNX ( [5](05_passwd-7.html#5)), επέλεξαν διαφορετικούς τρόπους αποθήκευσης των συνθηματικών, αλλά απέτυχαν στον σχεδιασμό των
αλγορίθμων τους. Περισσότερες πληροφορίες για την συγκεκριμένη αδυναμία του αλγορίθμου θα βρείτε στο <http://www.i-opener-linux.net/decrypt/>.
Βέβαια δεν αρκεί ένας καλός αλγόριθμος κωδικοποίησης για να είναι ασφαλής ένας λογαριασμός. Ο χρήστης έχει σημαντικό ρόλο στην ασφάλεια του λογαριασμού του και
αυτό γιατί η επιλογή του συνθηματικού ανήκει σε αυτόν. Οσο μεγάλο και να είναι το salt, όσο καλός και να είναι ο αλγόριθμος, αν το συνθηματικό είναι \'12345\'
είναι ζητημα δευτερολέπτων να βρεθεί. Για την αποφυγή ευκολων συνθηματικών από τους χρήστες η shadow μορφή των συνθηματικών, καθώς και η πιστοποίηση με PAM
(Plugable Authentication Modules), επιτρέπουν στον διαχειριστή του συστήματος να θέσει μέγιστο χρόνο ζωής ενός συνθηματικού, επιτρεπόμενο χρόνο αλλαγής ενός
συνθηματικού, λήξη λογαριασμών κλπ, κάτι που επιβάλεται σε ένα σύστημα που προορίζεται για ασφαλές. Επίσης υπάρχει η CrackLib του Alec Muffett, που μπορεί να
χρησιμοποιηθεί απο το πρόγραμμα αλλαγής συνθηματικών, για να απορρίπτει τα πολύ εύκολα από αυτά.
### [7. Παραπομπές]{#s7}
[]{#1} φοράς: Έστω y=A(x). Σε ένα αλγόριθμο μιας φοράς(A) αν γνωρίζουμε το y, είναι δύσκολο να υπολογίσουμε το x.
[]{#2} bits: 8 bit == 1 byte
[]{#3} MD5: Ο MD5 (ή Message Digest 5) είναι Αλγόριθμος που παράγει ένα 128 bits χαρακτηριστικό αριθμό για κάθε μηνύμα. Σχεδιαστηκε απο τον Ron Rivest και
περιγράφεται στο RFC1321
[]{#4} blowfish: κρυπτογραφικός συμμετρικός αλγόριθμος σχεδιασμένος από τον Bruce Schneier []{#5} QNX: Real-time λειτουργικό σύστημα