拥有更安全的渠道在整个网络上传输用户信息的最佳方法

  • 下载源代码 - 1.1 MB

密码学

网络上的大多数问题都与安全问题以及在网络中保存和传输敏感数据有关。所以我们必须在它上面提供一个安全的系统。在网络中建立安全连接的最流行和最实用的方法是加密技术。加密技术是加密和解密数据以确保数据安全的过程。例如,在下图中,Bob 想要向 Alice 发送数据。此数据称为加密过程的消息和输入参数。然后将具有加密功能的特定密钥添加到此消息中并生成密文,即我们的加密消息,因此此消息通过网络,黑客正在等待窃取此数据。

在另一阶段,Alice 等待接收 Bob 的消息,在这一侧,有使用相同密钥解密消息的解密函数。这个秘密密钥与鲍勃一方的密钥完全相似。因此,具有相同密钥和密文(加密密钥)的解密函数将为 Alice 生成解密消息,最后 Alice 将收到 Bob 的消息。此过程称为对称加密。

这个过程中最大的问题是提供一个强大而复杂的密钥。因为加密和解密算法在互联网上可用,并且使用几乎相似的步骤和功能来加密数据和更改这些算法是无用的,因为黑客很容易找到它们。因此,我们必须集中精力制作电源密钥,以确保机密数据的安全。

  1. 密码学对于任何安全问题来说都是非常棒的工具。
  2. 但是密码学不适合幼稚的用户做出伤害自己的动作,尤其是对于社交攻击者。
  3. 密码学需要创新新方法,因为使用旧的加密系统与不使用它一样糟糕。
  4. 如果密码学实施不正确,则只能正确满足您的要求。

一些安全通信解决方案

  1. Web 流量:HTTPS -> 安全套接字层 (SSL/TLS)
  2. 无线流量:GSM:802.11 或 WPA2:蓝牙
  3. 磁盘上的加密文件

高级加密标准 (AES)

AES 是使用相同密钥并基于Rijndael密码算法的加密技术之一。AES 基于替换和置换函数,并使用复杂的方法来生成强大且几乎牢不可破的密钥,这是我们的目标,以便通过网络传输我们的敏感数据。

第一步,AES 将长度为 128 位的密钥扩展到十多个密钥,其中每个密钥的长度为 128 位,即生成的密钥构建变体周期数。作为输入参数的消息将与这些键混合。AES 只AddRoundKey在 K 0 中使用“ ”函数,在 K n 中使用“ SubBytes”、“ Shiftrows”和“ AddRoundKey”,而在 AES 中在 K 2到 K n-1 中使用所有四个函数“ AddRoundKey”、“ SubBytes”、“ Shiftrows”和“ AddRoundKey”。最终,消息或明文通过这些复杂的功能,将被转换为加密消息或密文。

AES 反向使用此模式从加密消息生成相同的消息。AES 将消息文本和密钥转换为四乘四矩阵,因为按矩阵形式工作比原始形式更容易。看下图,对AES算法内部发生的事情有更清晰的想象。

添加轮键

此函数通过 XOR 函数混合 K i,j和 M i,j。这意味着 AES从消息和密钥中提取第i 行和第j列,并对这些重合的行和列应用 XOR 函数并产生 C i,j。在下图中,将在蓝色密钥和红色消息之间应用 XOR 以生成橙色密码。

子字节

此函数从具有特定模式和步骤的替换表中找到对 M i,j的替换,并将此新替换为 M ~ i,j。这意味着 AES从消息中提取第i行和第j列,并对消息矩阵的每一行和每列应用替换函数并生成密码矩阵 C i,j。

混合列

有一个固定矩阵 C,它将影响消息矩阵。在第一步,它不会改变第一行,而是将第二行向左移动,并且向左移动第三行,此外还为此应用 XOR 函数。

移行

此函数选取消息矩阵并且不更改该矩阵的第一行,之后对于第二行,移动一个单元格,以便将 M 1,0替换为 M 1,3。对于第二行,移动二,对于第三行,移动三。

我已经将下图说明为 AES 内部更深入的操作。DES 和 3DES 算法与 AES 几乎相似,例外是 3DES 是 168 位,它比 AES 多一些位,但它只是使用置换函数来生成密钥,而 AES 使用置换和替换函数,并且花费的时间更少,而不是3DES。

我的网络安全解决方案

我想发布一个带有身份验证和授权部分的解决方案来识别用户。身份验证使我们可以通过获取用户名和密码来了解用户的声明是否正确。有一个解决方案可以将这部分作为两步验证,首先通过获取密码,然后通过生物识别标志。在这种状态下,如果有人窃取了用户的密码,黑客将无法访问该用户的个人资料。

下一部分是授权,它与权限管理有关,确定特定角色是否有权访问和查看特定部分。例如,此处(在电子医疗保健系统中),医生有权访问其患者的健康信息并读取或写入 EHR。

第三部分是加密技术(AES)。正如我上面提到的,AES 使用不同的功能来加密来自黑客的数据。因此可以将数据库中的数据保存为加密文本而不是纯文本以增加安全问题。

关于我的解决方案的更多描述

我的解决方案是使用生物识别标志并将此密钥与密钥混合,以便在 AES 中生成更强大和安全的密钥。该生物特征密钥可以从指纹或角膜标志中提取。如今,可以通过手机(例如iphone)捕获指纹,并且可以将这些数据转换为第二密钥矩阵并将其与我们拥有的强密钥的秘密密钥混合。这些标志随时可用,我们不会忘记它们,黑客无法获得它们,因此这是保持数据机密性的一个很好的解决方案。

如何使用和实施代码

首先,打开Visual Studio 2013 -> File (Menu) -> New Project -> ASP.NET MVC -> Empty Controller -> Add New Controller

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.Mvc;namespace WebSecurity.Controllers
{public class AESController : Controller{//// GET: /AES/public ActionResult Index(){ViewData["Encrypted"] = TempData["TEncrypted"];ViewData["Decrypted"] = TempData["TDecrypted"];return View();}//txtforEN is PlainText//Key is Public Secret Key [HttpPost]public ActionResult Encryption(string Text, string Key){// Convert String to Bytebyte[] MsgBytes = Encoding.UTF8.GetBytes(Text);byte[] KeyBytes = Encoding.UTF8.GetBytes(Key);// Hash the password with SHA256//Secure Hash Algorithm//Operation And, Xor, Rot,Add (mod 232),Or, Shr//block size 1024//Rounds 80//rotation operator , rotates point1 to point2 by theta1=> p2=rot(t1)p1//SHR shift to rightKeyBytes = SHA256.Create().ComputeHash(KeyBytes);byte[] bytesEncrypted = AES_Encryption(MsgBytes, KeyBytes);string encryptionText = Convert.ToBase64String(bytesEncrypted);TempData["TEncrypted"] = encryptionText;return RedirectToAction("Index");}public byte[] AES_Encryption(byte[] Msg, byte[] Key){byte[] encryptedBytes = null;//salt is generated randomly as an additional number to //hash password or message in order o dictionary attack//against pre computed rainbow table//dictionary attack is a systematic way to test //all of possibilities words in dictionary weather or not is true?//to find decryption key//rainbow table is precomputed key for cracking password// Set your salt here, change it to meet your flavor:// The salt bytes must be at least 8 bytes.  == 16 bitsbyte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };using (MemoryStream ms = new MemoryStream()){using (RijndaelManaged AES = new RijndaelManaged()){AES.KeySize = 256;AES.BlockSize = 128;var key = new Rfc2898DeriveBytes(Key, saltBytes, 1000);AES.Key = key.GetBytes(AES.KeySize / 8);AES.IV = key.GetBytes(AES.BlockSize / 8);AES.Mode = CipherMode.CBC;using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write)){cs.Write(Msg, 0, Msg.Length);cs.Close();}encryptedBytes = ms.ToArray();}}return encryptedBytes;}[HttpPost]public ActionResult Decryption(string Text2, string Key2){// Convert String to Bytebyte[] MsgBytes = Convert.FromBase64String(Text2);byte[] KeyBytes = Encoding.UTF8.GetBytes(Key2);KeyBytes = SHA256.Create().ComputeHash(KeyBytes);byte[] bytesDecrypted = AES_Decryption(MsgBytes, KeyBytes);string decryptionText = Encoding.UTF8.GetString(bytesDecrypted);TempData["TDecrypted"] = decryptionText;return RedirectToAction("Index");}public byte[] AES_Decryption(byte[] Msg, byte[] Key){byte[] decryptedBytes = null;// Set your salt here, change it to meet your flavor:// The salt bytes must be at least 8 bytes.byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };using (MemoryStream ms = new MemoryStream()){using (RijndaelManaged AES = new RijndaelManaged()){AES.KeySize = 256;AES.BlockSize = 128;var key = new Rfc2898DeriveBytes(Key, saltBytes, 1000);AES.Key = key.GetBytes(AES.KeySize / 8);AES.IV = key.GetBytes(AES.BlockSize / 8);AES.Mode = CipherMode.CBC;using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write)){cs.Write(Msg, 0, Msg.Length);cs.Close();}decryptedBytes = ms.ToArray();}}return decryptedBytes;}}
}

右键单击索引(操作)-> 选择“添加视图”。

@{ViewBag.Title = "Index";Layout = "~/Views/Shared/_Layout.cshtml";
}<h2>Encryption And Decryption</h2><div style="color:red;" id="EncryptedText"
>Encrypted Message: @ViewData["Encrypted"]</div><div style="color:red;" id="DecryptedText"
>Decrypted Message: @ViewData["Decrypted"]</div><pre>
@using(Html.BeginForm("Encryption", "AES", FormMethod.Post))
{&lt;label id="lbk1">Key:&lt;/label>&lt;input name="Key" id="Key" type="text" /><br />
<br />&lt;label id="lbk2">Message:&lt;/label>&lt;input name="Text" id="Text" type="text" /><br />
<br />&lt;input id="btnEncryption" type="submit" value="Encryption" /><br />  <br />
}

如何测试应用程序

对于加密:

  1. 输入 Key 如:Key=122
  2. 输入消息:消息Mahsa
  3. 按“加密”按钮
  4. 您将看到密码文本 -->加密消息:7gkI7SpPzsOiJ8O2OO2jOQ==

对于解密:

  1. 输入相同的密钥=“ 122 ”
  2. 输入加密消息 --> 7gkI7SpPzsOiJ8O2OO2jOQ==
  3. 按“解密”按钮
  4. 您将看到:解密的消息:Mahsa

安全断言标记语言 (SAML)

SAML 是基于 XML 的开放标准,它格式化数据,这些数据应该在身份提供者和服务提供者之间将用户信息作为加密数据传输。它包括一个包含此加密数据的特定标签。

<saml:Assertion ..>
"includes important message from identity provider to service provider
"Who is this user (Attribute Identity)"Is he/she allowed to consume service?
</saml:Assertion>

当服务提供者通过安全通道向身份提供者调用直接查询时,将请求 SAML 协议。SAML 中流行的用途是用于 Web 浏览器单点登录 (SSO)。在这个问题中,使用 SAML 会发生以下问题:

  1. 请求目标资源

    用户通过 Chrome 或 Mozila 等网络浏览器在地址栏中输入www.sample.com,例如:http : //www.stackoverflow.com/,并从 stackoverflow 作为服务提供者发送使用特定服务的请求。此用户可以使用堆栈身份验证直接输入其用户名和密码,或从登录页面选择身份验证选项之一。

  2. 重定向到 SSO 服务

    假设用户选择 Google 选项进行身份验证过程,那么 stackoverflow 会将他/她从http://www.stackoverflow.com/重定向到https://accounts.google.com。

  3. 请求 SSO 服务

    在此示例中,stackoverflow 是为用户提供所需服务的服务提供商,而 Google.com 是为用户执行单点登录的身份提供商。谷歌通过请求一些属于用户的信息(例如用户名和密码)来识别用户,并检查这些凭据是否有效。身份提供者使用 LDAP、Radius 和 Active Directory 等目录服务进行身份验证。

  4. 用 XHTML 表单响应

    在这个阶段,用户应该作为身份提供者按下 Google.com 内的接受按钮,以允许他/她的一些信息(例如用户名和电子邮件)传递并传输给服务提供商。当他/她这样做时,身份提供者以 XHTML 形式(下面的代码)响应服务提供者。

    <form method="post" action="https://sp.example.com/SAML2/SSO/POST" ...><input type="hidden" name="SAMLResponse" value="response" /><input type="submit" value="Submit" />
    </form>
  5. 请求断言消费者服务

    如果在上述 XHTML 中,身份提供者允许用户使用来自服务提供者的服务,因此用户重定向到服务提供者,而他/她是该站点的有效用户并且可以使用所需的服务。(虽然在这个阶段,服务提供者进行授权过程来检查他/她使用每个服务的访问权限)。

  6. 重定向到目标资源

    在这个阶段,服务提供者进行授权过程来检查他/她使用每个服务的访问权限,然后用户将被重定向到目标资源。

  7. 请求目标资源

    用户向服务提供者请求特定资源,正如我上面提到的,如果服务提供者确认了许可,那么用户就可以使用它。如http://astronomy.stackexchange.com/

  8. 响应请求的资源

    如果用户有权访问该服务,则服务提供者会将用户重定向到资源。

字典

在本节中,我已经解释了一些需要更多描述的具体词。这部分可以解决误解,并在我的写作风格中显示出我打算使用这些词的意图。

XML

可扩展标记语言是一种标记语言,它包含对文档进行编码和格式化的特定规则,以便它们对人和机器都可读。XML 可用于处理 Web 应用程序和服务以组织不同类型的数据结构和人类语言。

XML 有规则来定义如何安排我们的内容。它包括“ <div></div>”标签,“ ”内的class属性等属性,最后我们的数据位于标签内,例如“ ”内,其声明以“ ”开头。<div class=”class1”></div>Hello“<div class=”class1”>Hello</div>”<?xml version="1.0" encoding="UTF-8"?>

安全令牌

安全令牌是一种为身份验证过程生成密钥的设备。它是一个额外的工具,可以提高安全性,以检测用户是否真的声称自己是谁。它是密钥生成器、USB 连接器和蓝牙无线等设备。它为密码学问题(加密和解密功能)存储了一个密钥,该密钥可以是生物特征标志,例如指纹或数字签名。这个具有特定密码功能的密钥可以生成一个新的数字号码,用户在用户名和密码后输入这个数字号码。这个密钥证明用户的主张是他/她真正主张的与否。图中,用户输入用户名和密码,然后按设备上的按键,输入数字“ 54392971”作为密码,然后点击“登录”。

服务提供者

服务提供商被称为公司,向其客户提供服务列表。这些服务分为电信、应用、存储场所和互联网。

身份提供者

身份提供者是第三方,除了两部分(认证情况有消费者作为用户和供应商作为服务提供者两部分)检测用户是否为授权用户并将用户的一些重要信息提供给服务提供者,最终授权用户获得许可消费服务。

例如,stackoverflow.com 是一个供应商(服务提供商),您可以在相关部分提出您的问题。如果用户想登录此站点,它有一些选项可以这样做,例如使用 Google、Facebook、雅虎、LiveJournal、WordPress、Blogger、Verisign 和 AOL 或通过 stackoverflow 登录。如果用户选择stackoverflow,那么他/她应该为此站点创建用户名和密码,并在此处再次输入所有重复信息。每当用户选择身份提供者的其他选项时,他就会从 stackoverflow 重定向到这些网站,并向他们输入特定的用户名和密码,然后这些网站决定该用户是否有效?如果用户有效,那么用户的电子邮件地址等信息将被传递到 stackoverflow 站点。

重定向到 Google 进行身份验证(使用 Google 帐户登录 Stackoverflow.com)。

LDAP

轻型目录访问协议 (LDAP) 是一种 Internet 协议。LDAP 通过为每个数据创建索引并仅过滤所需的特定项目来查找信息。

活动目录

Active Directory 是一种基于 Windows 域的目录服务,具有身份验证和授权服务。用户登录windows域中的计算机,Active Directory检查LDAP提交的密码,如果用户名和密码有权访问则Active Directory,则允许其使用所需的服务。

视窗域

Windows 域是一种网络,所有用户和计算机及其外围设备都在中央计算机上注册。

联合身份提供者

联合身份是一种在用户身份(用户名和密码)和其他身份管理之间建立联系的技术,以便对用户进行身份验证并通知源节点用户是有效的。这意味着您可以只有一个用户名和密码,并且在多个网站上都有效。单点登录是联合身份的子集。

U-Prove

U-Prove 是一种加密技术,它揭示了想要浏览多个网站的用户的最少信息,尤其是当用户与身份提供者交互时。U-Prove 很难跟踪用户想要做什么。U-Prove 令牌通过两个功能加密信息。首先,没有相关句柄的信息的加密“包装”导致避免跟踪用户。其次,用户在验证者政策过程中披露的信息最少,例如“年龄”,而没有明确披露“出生日期”。

开放ID

OpenID 是一种允许用户继续其身份验证过程的协议,被称为“依赖方”的其他网站称为第三方,例如 Google、Microsoft、Facebook、AOL 等。

无状态和有状态

无状态是一种在客户端和服务器之间建立独立请求和响应的通信协议。相比之下,Stateful 不需要服务器保存有关请求者和响应者之间通信的信息,而有状态需要服务器保存有关其状态的信息。互联网协议、互联网的 IP 基础和超文本传输​​协议、HTTP、网络数据通信的基础都是无状态的例子。传输控制协议 TCP 是 Stateful 的示例,它在客户端和服务器之间提供可靠且经过错误检查的通信。

结论

我在我的应用程序中使用了最流行的加密技术之一作为 AES。AES 是一种对称加密函数,在发送方和接收方使用相同的密钥,AES 产生强密钥,黑客无法破解它。因此 AES 是保持数据机密性和完整性的好方法。

高级加密标准 (AES) 和安全断言标记语言 (SAML) 的 Web 安全相关推荐

  1. [密码学] 高级加密标准AES

    文章目录 AES算法 AES-128 加密过程 S-BOX 选取原则 构造方式 行移位 列混合运行 密钥扩展方案 AES-128的密钥扩展 性质 解密过程 雪崩效应 AES算法  ①比利时密码学家Da ...

  2. 【现代密码学原理】——高级加密标准AES(学习笔记)

  3. 什么标准规定了aes加密_高级加密标准(AES)分析

    原标题:高级加密标准(AES)分析 0×00 前言 在密码学中,block(分组)密码的工作模式被广泛使用,使用同一个分组密码密钥对很多称之为块的数据加密,在优于很多诸如RSA.ECC密码的性能的情况 ...

  4. 安全性断言标记语言(SAML)介绍

    简介 安全是所有Web项目在设计时都要考虑的一个重要因素.无论是选择最短口令,决定何时使用SSL加密HTTP会话,还是通过自动登录cookie来识别用户,都经常要付出重大的设计努力,以保护用户的身份信 ...

  5. 分组密码与高级加密标准(一)

    第1关:代换-置换网络 任务描述 在密码学中,代换-置换网络(或译作置换排列网络,英语:Substitution-Permutation Network,缩写作 SP-network 或 SPN)是乘 ...

  6. 小编带你简单了解一下加密技术原理:AES加密标准

    随着因特网的发展,信息传输及存储的安全问题成为影响因特网应用发展的重要因素.信息安全技术也就成为了人们研究因特网应用的新热点. 信息安全的研究包括密码理论与技术.安全协议与技术.安全体系结构理论.信息 ...

  7. 【Android工具】DES终结者加密时报——AES加密演算法

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...

  8. WEP/WPA/WPA2加密标准有什么区别?

    WEP/WPA/WPA2加密标准有什么区别? 大多数的公共场合 WiFi 是不加密的,但居住区却是常见一些使用 WAP 和 WAP2 加密标准的 Wi-Fi 信号.可能很多用户在设置路由器加密标准的时 ...

  9. Android加密篇 AES

    AES加密是一种高级加密标准,是一种区块加密标准.它是一个对称密码,就是说加密和解密用相同的密钥.WPA/WPA2经常用的加密方式就是AES加密算法. import java.io.Unsupport ...

最新文章

  1. 新闻上的文本分类:机器学习大乱斗
  2. openssl 自建CA签发证书 网站https的ssl通信
  3. Ubuntu 中sendmail 的安装、配置与发送邮件的具体实现
  4. Android平台发展史
  5. myeclipse 8.5 注册码
  6. 转:Openflashchart笔记
  7. Unity shader实现水效果(折射,反射,波浪,1.菲尼尔,深度颜色)
  8. hihocoder1187 Divisors
  9. win10+Ubuntu17.10双系统安装(惠普台式机)
  10. 测试方法-等价类划分法
  11. MCSA / Windows Server 2016 使用Hyper-V组件搭建实验环境
  12. 服务器上excel文件损坏,excel文件打不开的原因和解决方法 excel文件损坏怎么修复...
  13. 快速幂计算x的n次幂,递归版本、迭代版本、python实现
  14. Visual Studio 2022 中的键盘快捷方式
  15. iOS:学习音视频的过程
  16. 通达信交易接口以什么形式执行下单的?
  17. 树状数组入门——以洛谷3374为例
  18. 软件开发项目管理工具哪个好?
  19. Python虚拟环境之pyenv
  20. 内外升级动力不变 北京现代第四代途胜上市15.59-23.99万

热门文章

  1. 记录文件服务器的操作日志
  2. 主机名以及内外部命令
  3. java-php-python-springboot线上教学平台计算机毕业设计
  4. 搭建线上教学平台前,需要明确哪些问题?
  5. 写入CSV文件时乱码与格式问题
  6. 【医学图像处理】CT成像技术之图像质量
  7. Python Tkinter 之Radiobutton控件(Python GUI 系列8)
  8. 十七、网上商城项目(5)
  9. 【责任链模式】责任链模式原来如此简单
  10. golang日志库zerolog使用记录