https://github.com/zhhaogen/dynamicauth
https://github.com/zhhaogen/dynamicauth
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/zhhaogen/dynamicauth
- Owner: zhhaogen
- License: mit
- Created: 2023-09-12T05:13:11.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-09-12T05:16:14.000Z (over 1 year ago)
- Last Synced: 2023-09-12T23:17:11.997Z (over 1 year ago)
- Language: Java
- Size: 13.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 一种基于同态加密的动态密码授权
## 前提
传统密码登录、授权,使用的是固定密码,安全问题很大,容易被窃取。想支付宝、银行卡等的支付密码更是使用少得可伶数字作为密码,在公众场合存在被偷窥窃取的风险。生物指纹等不仅有唯一性,更是不可更改性,易被社会工程学方式盗取,一旦被窃取将面临巨大安全。
基于同态加密算法的安全授权,可以做到使用简单原始密令的情况下,大大增强安全性,并且每次授权都是随机不同的。
## 特性
* PIN被加密,即使服务器数据库被泄露,也可保证PIN安全
* 随机验证码,即使被窃取输入结果,也无法得知实际PIN
## 示例
servlet?spring boot?微服务?,请参见example
## 流程
```mermaid
sequenceDiagram
客户端->>服务端:1 .请求生成秘钥对
服务端->>服务端:generateKeyPair
服务端->>服务端:保存PublicKey
服务端->>客户端:返回KeyPair
客户端->>服务端:2 .设置PIN
服务端->>服务端:ePin=Enc(PIN,d),d为加密随机数
服务端->>服务端:保存ePin与d
客户端->>服务端:3 .设置运算函数f
服务端->>服务端:保存f
客户端->>服务端:4 .请求授权
服务端->>服务端:生成验证码code
服务端->>客户端:返回code、d
客户端->>客户端:计算b=Enc(PIN+f(code),d)
客户端->>服务端:5 .进行授权,发送a
服务端->>服务端:计算eCode=Enc(f(code),d)
服务端->>服务端:计算a=Add(ePin,eCode,d)
服务端->>服务端:比较a==b,即Enc(PIN+Code)==Enc(PIN)⊕Enc(Code)
服务端->>客户端:返回授权结果
```
注释:
Enc为加密函数,d为加密随机数
Add,⊕为自定义加法函数