آخه این حرف خیلی کلی و مبهم هست.
باید معلوم بشه دقیقا در چه کاربردی چطوری!
طرف از sha در کجا چطوری استفاده میکرده که حالا بجاش PBKDF2 بذاره؟
اگر منظورت مشتق کردن کلید از کلید است (نه کلید از پسورد یا passphrase)، خب وقتی میگیم کلید، یعنی کلید باید randomness کافی داشته باشه، و وقتی شما یک کلید با randomness (بعضیا میگن آنتروپی، ولی به من گفتن randomness درست تره) کافی داشته باشید اصلا نیازی نیست نگران باشید و بخواید سرعت رو کاهش بدید. مثلا وقتی از یک کلید 128 بیتی استفاده کنید که واقعا همون حدود 128 بیت randomness داشته باشه، عمرا قابل brute-force نیست. حالا اگر کسی خیلی وسواس داره یا نیازهای بالاتری داره خب میتونه از رمزگذاری و کلید 256 بیتی استفاده کنه، که این به مراتب امن تر و اصولی تر از استفاده از PBKDF2 با یک کلید ضعیف تر است. کلیدهای 256 بیتی رو هم کسی تصورش رو هم نمیتونه بکنه که بشکنه. البته طبیعتا برای درست در اومدن همهء اینا، ما باید یک تابع رندوم اصولی و امن داشته باشیم که بتونیم ازش randomness کافی بگیریم، یا بهرصورت جور دیگه از جایی به روشی این randomness رو بدست بیاریم. بخاطر همین بنده روی تابع رندوم هم خیلی کار و تحقیق کردم و یک تابع مفصلی برای این تهیه کردم که حتی سعی شده از منابع کمکی احتمالی هم استفاده کنه و تنها به توابع موجود در کتابخانه های امنیتی یا سیستم عامل تکیه نکرده باشیم (گرچه اونها خودشون برای امنیت طراحی شدن و بر اساس تئوری هم که شده باید بقدر کافی randomness داشته باشن). تابع رندوم یکی از چیزهای خیلی مهم و پایه در رمزنگاری است که اشتباهات و ضعف در این قسمت هم زیاد دیده میشه و خیلی وقتا ضعف اصلی یک سیستم رمزنگاری همین تابع رندوم است.
البته این ایده که با این وجود از یک تابع کند کننده هم استفاده کنیم برای احتیاط بیشتر، بنظرم جالب میاد و شاید بعضی جاها به درد بخوره، ولی تاحالا نشنیده بودم و خب جای بحث و تحقیق داره هرجایی هم نمیشه استفاده کرد و باید تحلیل کرد دید که واقعا چقدر میشه روی میزان امنیتی که اضافه میکنه حساب کرد. بهرحال در خیلی از سیستمهای رمزنگاری سرعت پارامتر مهم یا حیاتی است. توابع رندوم امن رو میشه با سرعت خوب ساخت، ولی توابع تبدیل پسورد به کلید اصولا نمیشه سریع باشن و عمدا کند کار میکنن. اگر سریع باشن که اصلا دیگه علت وجود و استفاده از اونها معنی نداره!