密码安全

Posted ygjzs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码安全相关的知识,希望对你有一定的参考价值。

密码安全

密码的作用---证明是你
密码的存储
密码的传输
密码的替代方案
生物特征密码的问题

技术图片

密码-泄露渠道

  • 数据库被偷
  • 服务器被入侵
  • 通讯被窃听
  • 内部人员泄露数据库
  • 其它网站(撞库)

密码-存储

  • 严禁明文存储(防泄漏)
  • 单向变换(防泄漏)
  • 变换复杂度要求(防猜解)
  • 密码复杂度要求(防猜解)
  • 加盐(防猜解)

密码-哈希算法

  • 明文-密文---一一对应
  • 雪崩效应
  • 密文明文 无法反推
  • 密文固定长度
  • 常见哈希算法: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 传输
  • 频率限制
  • 前端加密意义有限

在前端加密需要安装js-md5模块,运行jspm install node:js-md5

前端进行加密,这是前后端要有相同的盐 SUGAR

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("密码不正确");
}

生物特征密码

  • 指纹(唇纹)
  • 声纹
  • 虹膜
  • 人脸

生物特征密码

  • 私密性-容易泄露
  • 安全性-碰撞
  • 唯一性-终身唯一无法修改

以上是关于密码安全的主要内容,如果未能解决你的问题,请参考以下文章

21个常用代码片段

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

CPNtools协议建模安全分析---实例变迁标记

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

PHP 代码片段

unity状态机怎么调出来