3、隔离性
然后就是要求做成一个组件,并且这个组件具有独立性,可以不依赖于系统中的其他组件。如一个bearer token的组件,它要使用这个组件的话,也不需要引用anti-CSRF这种机制了。
再进一步的缩小需求范围,加密的数据不需要在系统之外的其他系统中使用,另外处理速度要尽可能的快,因为每一次web请求都会使用加密组件一次或者多次。
基于以上要求,微软提出来可以使用密码学,因为这是一个典型的密码学应用的场景。确实这是一个密码学的应用场景,并且是一个非对称加密算法的场景。但是大家都知道,非对称加密是由一个公钥和私钥用来保证安全性的,即使公钥遭泄露,整个通讯仍然是安全的,这就是它比对称加密的好处。但是非对称加密也是有缺点的,就是加密和解密花费的时间长,速度慢。
但是上面的要求又是需要速度尽可能快,怎么办呢? 于是微软的工程师们想出了可以通过精简并且优化非对称加密机制,来达到这个要求。因为不需要跨系统或者跨语言什么的,所以也不需要什么协议之类的,这就给优化带来了更多的可能性。
到这里,我就想,如果让我来基于以上几点来设计开发这样一个系统,我应该怎么样设计?怎么样达到要求?
带着这个问题,我们来进一步看看微软是怎么样做的吧?
下面是一些总结的设计原则 :
1、配置应该尽量的简单,默认情况下应该可以零配置,开发人员可以直接运行。
2、提供一个简单的API,应该容易使用,并且不会轻易用错。
3、开发人员不需要专门学习怎么样管理这些钥(公钥,私钥),系统应该自动的选择算法和管理钥的生命周期。理想情况下开发人员都不应该访问这些钥的原始文件。
4、钥应该是受保护的,不会被远程调用到。系统应该有一个自动保护机制并且可以自动应用。
如果让我设计这样一个库,我可能不会想到这么多,也许只会想到前3点。
再看一下针对的受众群体:
1、应用程序开发人员和框架开发人员(不需要学习任何知识)。
2、应用开发人员和系统管理员(不使用默认配置,只是设定一些路径等)。
3、针对具有更高安全意识的开发人员提供可扩展api,或特定需求扩展(需要重写系统的组件,有一些独特的需求)。
以上,可以看到微软在开发一个组件的时候对问题的分析,也许我们可以从中学到一些东西。
ASP.NET Core 中的数据保护
Web应用程序中经常需要存储一些敏感数据(如用户密码),Windows 系统为桌面程序提供了DPAPI用来使用,但是并不适用于 Web 系统。ASP.NET Core提供了一套简单易用的API 用来保护数据。








