-
Notifications
You must be signed in to change notification settings - Fork 24
/
passwords.xml
204 lines (199 loc) · 8.1 KB
/
passwords.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: b8e1b1357def73f310c9f7405035b3acc0cb1eaf Maintainer: nilgun Status: ready -->
<!-- CREDITS: oguzc -->
<chapter xml:id="faq.passwords" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Güvenli Parola aşlama</title>
<titleabbrev>Parola aşlama</titleabbrev>
<para>
Bu bölümde, parolaları güvenlik altına alma da kullanılan
aşlama (hashing) işlevinin arka planını ve etkin
bir şekilde nasıl uygulayabileceğimizi ele alacağız.
</para>
<qandaset>
<qandaentry xml:id="faq.passwords.hashing">
<question>
<para>
Kullanıcıların girmiş olduğu parolaları neden aşlamalıyım?
</para>
</question>
<answer>
<para>
Parola aşlama, kullanıcıların parola girerek kullandıkları bir
uygulamanın tasarımında, mutlaka göz önüne alınması gereken en
temel güvenlik faktörlerinden birisidir. Parola aşlama tekniği
kullanılmadığı takdirde, uygulamanızın veri tabanında saklanan
her türlü parola veritabanınızı ele geçirenler tarafından çalınabilir
ve ardından sadece uygulamanız değil uygulamanızı kullanan kullanıcılar
aynı parolayı başka servisler için de kullanıyorlarsa risk altında
kalırlar.
</para>
<para>
Kullanıcılarınızın parolalarını veri tabanına kaydetmeden önce,
uygulayacağınız aşlama algoritması ile saldırganın özgün parolayı
tahminini imkansız kılarken, ilerleyen süreçte de özgün parolayı
bulma çabalarını da (kaba kuvvet saldırısı tekniğiyle) zorlaştırmış
olursunuz.
</para>
<para>
Ancak, dikkat edilmesi gereken önemli nokta, parola aşlama sadece
veri kaynağınızın ele geçirilmesine karşı koruma sağlarken, uygulamanıza
isteminiz dışında yerleştirilmiş zararlı kodlar aracılığıyla şifreleri
ele geçirmede koruma sağlamaz.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.fasthash">
<question>
<para>
<function>MD5</function> ve <function>SHA1</function> gibi genel
aşlama işlevlerini parolalar için kullanmak neden uygun değildir?
</para>
</question>
<answer>
<para>
MD5, SHA1 ve SHA256 gibi aşlama algoritmaları verimli ve çok hızlı
olmaları için tasarlanmıştır. Modern teknikler ve bilgisayar
ekipmanları ile, Kaba kuvvet (brute force) atak tekniği kullanarak özgün
değere ulaşma sıradan bir hale gelmiştir.
</para>
<para>
Çünkü, modern bir bilgisayar, oldukça hızlı olarak bu aşlama
tekniklerini tersine çevirir, çoğu güvenlik uzmanı da bunların parola
aşlama da kullanımına karşı aleyhte tavsiye de bulunur.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.bestpractice">
<question>
<para>
Genel aşlama teknikleri kullanışlı olmadıklarına göre,
parolalarımı nasıl aşlamalıyım?
</para>
</question>
<answer>
<para>
Parolaları aşlamada, dikkate alınması gereken iki husus vardır;
hesaplamanın maliyeti ve tuzlama.
aşlama algoritmasında daha fazla hesaplama maliyeti demek
kaba kuvvet ataklarının daha fazla zaman gerektirmesi demektir.
</para>
<para>
PHP, güvenli bir şekilde
<link linkend="function.password-hash">aşlama</link> ve
<link linkend="function.password-verify">parola doğrulamayı</link>
birlikte güvenle sağlayan bir <link linkend="book.password">yerel parola
aşlama APIsi</link> sağlamaktadır. Ayrıca PHP 5.3.7 sürümünden itibaren
kullanılabilen <link xlink:href="&url.password.compat;">saf bir PHP
uyumluluk kütüphanesi</link> de vardır.
</para>
<para>
Diğer bir seçenek çeşitli aşlama
algoritmalarını destekleyen <function>crypt</function>
işlevidir. Bu işlevi kullanırken, PHP, desteklenen her bir algoritmayı
kendi bünyesinde barındırdığı için, algoritmalardan bir veya
bir kaçı sisteminizde bulunmasa da seçtiğiniz algoritmanın
varlığını ve kullanımını garanti eder.
</para>
<para>
Parola aşlama de tavsiyemiz Blowfish algoritmasını kullanmanızdır,
parola aşlama APIsi tarafından da öntanımlı olarak kullanılan bu
algoritma MD5 veya SHA1 den daha fazla hesaplama gerektirmesine rağmen
hala ölçeklenebilir durumdadır.
</para>
<para>
Bir parolayı doğrulamak için <function>crypt</function> kullanıyorsanız,
bir sabit zaman dizgesi karşılaştırması kullanarak zamanlama saldılarını
engellemeyi düşünmeniz gerekir. Ne PHP'nin <link
linkend="language.operators.comparison">== ve === işleçleri</link> ne de
<function>strcmp</function> işlevi sabit zaman dizgesi karşılaştırması
yapar. <function>password_verify</function> bunu sizin için yapacak gibi
görünse de mümkün olduğunca <link linkend="book.password">yerel parola
aşlama APIsini</link> kullanmanızı şiddetle öneririz.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.salt">
<question>
<para>
Tuzlama nedir?
</para>
</question>
<answer>
<para>
Bir şifreleme tuzu, gökkuşağı tablosu olarak bilinen, daha önceden
hesaplanarak oluşturulmuş aşlama listesinden karşılaştırma yaparak
eşleştirme ihtimalini ortadan kaldırmak için, aşlama işlemi esnasında
uygulanan bir değerdir.
</para>
<para>
Basit anlamda tuz, haşlanmış değerinizi kırma teşebbüslerini
zorlaştırmada kullanılan ek bir veridir. İnternet üzerinde, daha önceden
hesaplanmış kapsamlı aşlama değerlerinin yanı sıra özgün değerleri de
barındıran bir dizi liste hizmeti vardır. Tuz kullanmak bu listelerden
aşlama değerini bulmayı mantıksız veya imkansız kılar.
</para>
<para>
Bir tane sağlanmamışsa <function>password_hash</function> rasgele bir
tuz oluşturacaktır ve bu genelde en kolay ve en güvenilir yaklaşımdır.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.password.storing-salts">
<question>
<para>
Tuzlarımı nasıl saklarım?
</para>
</question>
<answer>
<para>
<function>password_hash</function> veya <function>crypt</function>
işlevini kullanırken, dönen değer üretilen aşlanmış parola olup tuzu
da içerir. Parolaları doğrularken <function>password_verify</function>
veya <function>crypt</function> işlevine doğrudan verilebilecek şekilde
aşlama bilgisini içeren bu değer veritabanınızda hiç değiştirilmeden
harfi harfine saklanmalıdır.
</para>
<para>
Aşağıdaki şekil, <function>crypt</function> veya
<function>password_hash</function> işlevinden dönen değerin biçimini
gösterir. Görebileceğiniz gibi, ileriki bir parola doğrulaması için
gereken tuzu ve algoritma ile ilgili tüm bilgiyi içinde barındırmaktadır.
</para>
<para>
<mediaobject>
<alt>
password_hash veya crypt işlevinden dönen değerin bileşenleri:
sırasıyla, seçilen algoritma, algoritmanın seçenekleri, kullanılan tuz
ve aşlanmış parola.
</alt>
<imageobject>
<imagedata fileref="en/faq/figures/crypt-text-rendered.svg" width="690"
depth="192" format="SVG" />
</imageobject>
</mediaobject>
</para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->