天天看點

密碼安全

密碼安全

密碼的作用---證明是你

密碼的存儲

密碼的傳輸

密碼的替代方案

生物特征密碼的問題

密碼安全

密碼-洩露管道

  • 資料庫被偷
  • 伺服器被入侵
  • 通訊被竊聽
  • 内部人員洩露資料庫
  • 其它網站(撞庫)

密碼-存儲

  • 嚴禁明文存儲(防洩漏)
  • 單向變換(防洩漏)
  • 變換複雜度要求(防猜解)
  • 密碼複雜度要求(防猜解)
  • 加鹽(防猜解)

密碼-雜湊演算法

  • 明文-密文---一一對應
  • 雪崩效應
  • 密文明文 無法反推
  • 密文固定長度
  • 常見雜湊演算法:md5,sha1,sha256
密碼安全
密碼安全

加密次數越多,複雜度越大,就越可以對抗彩虹表

密碼安全

密碼-變換次數越多越安全

  • 加密成本幾乎不變(生成密碼時速度慢一些,但對破解者是緻命的)
  • 彩虹表失效(數量太大,無法建立通用性)
  • 解密成本增大 N 倍

傳說以前出現密碼明文存儲被洩露的案例(無法确定)

加密

var password = {};
var md5 = function(str) {
    var crypto = require('crypto');
    var md5Hash = crypto.createHash('md5');
    md5Hash.update(str);
    return md5Hash.digest('hex');
};

password.getSalt = function() {
    return md5(Math.random()*99999+''+new Data().getTime());
}

password.encryptoPassword = function(salt, password) {
    return md5(salt + 'af@#$%^asda&' + password);
}
module.exports = password;      
// 如果使用者沒有salt,需要更新
if (!user.salt) {
  var salt = password.getSalt();
  var newPassword = password.encryptPassword(salt, user.password);
  await query(
    `update user set password = '$(newPassword)', salt = '${salt} where id = ${user.id}'`
  );
  user.salt = salt;
  user.password = newPassword;
}
var encryptPassword = password.encryptPassword(user.salt, data.password);
if (encryptPassword !== user.password) {
  throw new Error("密碼不正确");
}      

密碼傳輸的安全性

  • https 傳輸
  • 頻率限制
  • 前端加密意義有限
var SUGAR = "!@#¥@#@¥#¥%GDF456¥%";
daat.password = md5(data.username + SUGAR + data.password);      
var password = {};
var md5 = function(str) {
    var crypto = require('crypto');
    var md5Hash = crypto.createHash('md5');
    md5Hash.update(str);
    return md5Hash.digest('hex');
};

password.getPasswordFromText = function(username, password) {
   var SUGAR = '!@#¥@#@¥#¥%GDF456¥%';//與前端一緻
   return md5(username+ SUGAR + password);
};

password.getSalt = function() {
    return md5(Math.random()*99999+''+new Data().getTime());
}

password.encryptoPassword = function(salt, password) {

    return md5(salt + 'af@#$%^asda&' + password);
}
module.exports = password;      
if (!user.salt) {
  var salt = password.getSalt();
  var newPassword = password.getPasswordFromText(user.username, user.password);
  var encryptedPassword = password.encryptPassword(salt, newPassword);
  await query(
    `update user set password = '$(newPassword)', salt = '${salt} where id = ${user.id}'`
  );
  user.salt = salt;
  user.password = encryptedPassword;
}
var encryptPassword = password.encryptPassword(user.salt, data.password);
if (encryptPassword !== user.password) {
  throw new Error("密碼不正确");
}      

生物特征密碼

  • 指紋(唇紋)
  • 聲紋
  • 虹膜
  • 人臉

  • 私密性-容易洩露
  • 安全性-碰撞
  • 唯一性-終身唯一無法修改
上一篇: 密碼知識
下一篇: 密碼脫落

繼續閱讀