加拿大快乐8最快开奖
当前位置:首页 > 开发教程 > 数据库 >

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

时间:2019-04-09 21:14 来源:互联网 作者:源码搜藏 浏览: 收藏 挑错 推荐 打印

通过高级?#29992;?#26631;准(AES)和安全断言标记语言(SAML)在Web上的安全性 密码: 网络中的大多数问题都是安全问题,而且由于在网络中保存和转换敏感数据,因此我们必须在其上提供安全系统。在网络中建立安全连接的最流行和最实用的方法是?#29992;?#25216;术。密码技术是加

通过高级?#29992;?#26631;准(AES)和安全断言标记语言(SAML)在Web上的安全性

密码: 

网络中的大多数问题都是安全问题,而且由于在网络中保存和转换敏感数据,因此我们必须在其上提供安全系统。在网络中建立安全连接的最流行和最实用的方法是?#29992;?#25216;术。密码技术是?#29992;?#21644;解密数据的过程,以保证数据的安全。例如,在下图中,Bob想要向Alice发送数据。此数据称为?#29992;?#36807;程的消息和输入参数。然后将具有?#29992;?#21151;能的特定密钥添加到此消息并生成密?#27169;?#36825;是我们的?#29992;?#28040;息,因此该消息通过黑客等待抢夺此数据的网络。

 

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

在另一个阶段,Alice等待接收Bob的消息,并且在?#19988;?#20391;有解密功能,它使用相同的密钥来解密消息。这个秘密密钥与鲍勃的密?#23458;?#20840;相似。因此,具有相同密钥和密?#27169;用?#23494;钥)的解密功能将为Alice产生解密消息,最后Alice将接收Bob的消息。此过程称为对称?#29992;堋?/p>

这个过程中最大的问题是提供强大而复杂的密钥。因为?#29992;?#21644;解密算法在互联网上可用并且使用几乎相似的步骤和功能来?#29992;?#25968;据并且由于黑客可以容易地?#19994;?#23427;们而改变这些算法是无用的。因此我们必须集中精力生成电源密钥以保护安全的机密数据。  

  1. 对于任何安全问题,密码学都是非常棒的工具。
  2. 但是密码学并不适合天真的用户采取行动来伤害自己,特别是对于社交攻击者。
  3. 密码学需要创新新方法,因为使用旧的?#29992;?#31995;统与不使用它一样糟糕。
  4. 如果密码学实施不正确,除了正确满足您的要求之外。
一些安全通信解决方案
  1. 网络流量:HTTPS - >安全套接字层(SSL / TLS)
  2. 无线流量:GSM:802.11或WPA2:蓝牙
  3. 磁盘上的?#29992;?#25991;件

 

高级?#29992;?#26631;准(AES)

AES是使用相同密钥的?#29992;?#25216;术之一,并且在Rijndael密码算法上。AES基于替换和置换功能,并使用复杂的方法来生成强大且几乎牢不可破的密钥,这是我们通过网络传输敏感数据的目的。

在第一步,AES扩展密钥,128位长度到十个以上密钥,每个密钥具有128位长度,即生成的密钥构建变量周期的数量。作为输入参数的消息将与这些键混合。AES只在K 0中  使用“AddRoundKey”函数,在K n中使用“SubBytes”,“Shiftrows”和AddRoundKey“并且AES在K 2到K n-1中使用所有四个函数”AddRoundKey“,” SubBytes“,”Shiftrows“和AddRoundKey”。最终消息或纯文本传递这些复杂的功能,并将转换为?#29992;?#30340;消息或密文。 

AES反向使用此模式从?#29992;?#28040;息生?#19978;?#21516;的消息。AES将消息文本和键转换为四乘四矩阵,因为按矩阵?#38382;?#24037;作比原始?#38382;?#26356;容易。请看下面的?#35745;员?#26356;清楚地了解AES算法中发生的事情。 

 

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

 

添加回合密钥:

该功能 通过XOR功能混合K i,j   和M i,j。这意味着AES拾取我个   罗万德Ĵ 个 来自两个消息和键列和适用XOR函数对这些重合的行和列,并产生Ç I,J。在下面的?#35745;?#20013;,XOR将应用于蓝色键和红色消息之间以产生橙色密码。

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

 

替换字节:

该函数 从具有特定模式和步骤的替换表中?#19994;組 i,j的替换,并将该新替换为M ~ i,j 。这意味着AES 从消息中获取第  i  行和第  j 列,并对消息矩阵的每一行和每列应用替换函数,并产生密码矩阵C i,j。

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

 

混合列: 

有一个固定矩阵为C,它将影响消息矩阵。在第一步,它?#25442;?#25913;变第一行,但它会将第二行向左移动,然后向第三行移动到左边,除此之外应用XOR函数。

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

 

班次行:

此函数选取消息矩阵并且不更改此矩阵的第一行,之后第二行移位一个单元格,?#21592;鉓 1,0  将替换为M 1,3  。对于第二行移位两个,第三个移位三个。

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

 

我在下面的?#35745;?#20013;?#24471;?#20102;AES内部更深入的操作。有DES和3DES算法几乎与AES类似,例外是3DES是168并且它有一些比AES更多的位,但是它只使用置换函数来生成密钥,而AES使用置换和替换函数并且花费更少的时间而不是3DES。 

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

我的解决方案在Web上拥有更多安全性

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

下一部分是与权限管理相关的授权,并确定特定?#24039;?#26159;否有权访问和查看特定部分。例如,在这里(在EHealth护理系统中)医生有权访问他或她的患者的健康信息并读取或写入EHR。

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

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

 

更多描述我的解决方案

我的解决方案是使用生物识别标志并将此密钥与密钥混合,?#21592;?#22312;AES中生成更强大,更安全的密钥。该生物识别密钥可?#28304;?#25351;?#33529;?#35282;膜标志中提取。现在可以通过iphon等手机捕获指纹,这些数据可以转换为第二密钥矩阵并将其与密钥混合,我们有强密钥。这些标志随时可供我们使用,我们?#25442;?#24536;记它们,黑客无法实?#32456;?#20123;标志,因此保持数据机密性是一个很好的解决方案。

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

如?#38382;?#29992;和实施代码

首先打开visual studio 2013 - > File(Menu) - > New Project - > ASP.NET MVC - > Empty

控?#30772;?- >添加新控?#30772;?/p>

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

 
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 Byte

            byte[] 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 right
            KeyBytes = 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 wheather 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 bits
            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.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 Byte
            byte[] 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 />          
}

如何测试应用程序

对于?#29992;埽?/p>

1.输入密钥,例如:Key = 122

2.输入消息?#21512;?#24687; = Mahsa

3.按“?#29992;?rdquo;?#30913;?/p>

4.您将看到密文 - > ?#29992;?#28040;息:7gkI7SpPzsOiJ8O2OO2jOQ ==

对于解密

5.输入相同密钥=“122”

6.输入?#29992;?#28040;息 - >  7gkI7SpPzsOiJ8O2OO2jOQ ==

7.按“ 解密 ”?#30913;?nbsp;

8.您将看到:  解密的消息:Mahsa

安全断言标记语言(SAML)

SAML是基于XML的开放标准,用于格?#20132;?#25968;据,该数据应该将用户信息作为身份提供者和服务提供者之间的?#29992;?#25968;据进行传输。它包含包含此?#29992;?#25968;据的特定标记。

<saml:Assertion ..> 
<span style="font-size: 9pt;">"includes important message from identity provider to service provider
</span><span style="font-size: 9pt;">"Who is this user (Attribute Identity)
</span><span style="font-size: 9pt;"> "Is he/she allowed to consume service?
</span><span style="font-size: 9pt;"><</span><span style="font-size: 9pt;">/saml:Assertion</span><span style="font-size: 9pt;">></span>

 

当服务提供商通过安全信道呼叫直接查询身份提供商?#20445;琒AML协议是请求。SAML的热门用途是Web浏览器单点登录(SSO)。在本期中,使用SAML会发生以下问题:

 

  1. 请求目标资源

用户通过浏览器(例如chrome或Mozila)在地址?#25913;?#36755;入www.sample.com,例如:http://www.stackoverflow.com/并发送请求以使用stackoverflow中的特定服务作为服务提供商。此用户可以直接使用堆栈身份验证输入其用户名和密码,?#37096;梢源?#30331;录页面中选择一个身份验证选项。

 

  1. 重定向到SSO服务

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

 

  1. 请求SSO服务

在此示例中,stackoverflow是为用户提供所需服务的服务提供商,而Google.com是为用户执行单点登录的身份提供商。Google通过请求属于用户的某些信息(如用户名和密码)?#35789;?#21035;用户,并检查这些凭据是否?#34892;А?#36523;份提供程序使用LDAP,Radius和Active Directory等目录服务进行身份验证过程。

 

  1. 回应XHTML表格

在此阶段,用户应按Google.com内的接受?#30913;?#20316;为身份提供者,以允许他/她的某些信息(如用户名和电子邮件)传递给服务提供商。当他/她这样做?#20445;?#36523;份提供者以XHTML?#38382;劍?#19979;面的代码)响应服务提供者。

<form method="post" action="https://sp.example.com/SAML2/SSO/POST" ...>

<span style="font-size: 9pt;">    <</span>input<span style="font-size: 9pt;"> type="hidden" name="SAMLResponse" value="response" />
</span><span style="font-size: 9pt;">  
    <</span>input<span style="font-size: 9pt;"> type="submit" value="Submit" />

</span><span style="font-size: 9pt;"></</span>form<span style="font-size: 9pt;">></span>

 

  1. 请求断言消费者服务

如果在上述XHTML身份提供者?#24615;?#35768;用户使用来自服务提供者的服务,那么用户在他/她是该站点的?#34892;?#29992;户并且可以使用期望的服务时重定向到服务提供者。(尽管在此阶段服务提供商进行授权过程以检查他/她对每项服务的访问权限)。

 

  1. 重定向到目标资源

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

 

  1. 请求目标资源

用户请求来自服务提供商的特定资源,如上所述,如果从服务提供商确认权限,则用户可以使用它。如http://astronomy.stackexchange.com/

 

  1. 响应请求的资源

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

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

 

?#20540;?/p>

在本节中,我已经解释了一些需要更多描述的特定单词。这部分可以解决误解,并表达我的意图,在我的写作风格中使用这些词。

 

XML

可扩展标记语言是一种标记语言,包括对文?#21040;?#34892;编码和格?#20132;?#30340;特定规则,?#21592;?#20154;类和机器可读。XML对于处理Web应用程序和服务以组织不同类型的数据结构和人类语言非常有用。

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

 

安全令牌

安全令牌是为身份验证过程生成密钥的设备。这是一个额外的工具,可以提高安全性,以检测用户是否真的声称是谁。它是密钥生成器,USB连接器和蓝牙无线等设备。它为密码学问题(?#29992;?#21644;解密功能)提供了密钥,这个密钥可以是生物识别标志,如指?#33529;?#25968;字签名。具有特定?#29992;?#21151;能的该密钥可以生成新的数字号码,用户在输入用户名和密码后输入该数字号码。这个关键证明了用户的主张是他/她真正要求与否。在图中,用户应输入用户名和密码,然后按设备上的键并输入数字“54392971”进行密码,然后单击“登录”。

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

服务提供者

服务提供商被呼叫到公司,为其客户提供服务列表。这些服务分为电信,应用程序,存储位置和互联网。

 

身份提供者

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

例如,stackoverflow.com是供应商(服务提供商),您可以在相关部分中提出您的问题。如果用户想要登录此站点,则可以选择使用Google,Facebook,Yahoo,LiveJournal,WordPress,Blogger,Verisign和AOL或者stackoverflow。如果用户选择stackoverflow,那?#27492;?她应?#26790;?#35813;站点创建用户名和密码,并在此处再次输入所有重复信息。每当用户选择其他选项作为身份提供商,然后将从stackoverflow重定向到这些网站并输入特定的用户名和密码,然后这些网站决定该用户是否?#34892;В?#22914;果用户?#34892;В?#21017;用户的信息(如电子邮件地址)将传递到stackoverflow站点。  

 

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

 

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

重定向到Google以进行身份​​验证问题

(使用Google帐户登录Stackoverflow.com)

LDAP

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

 

活动目录

Active Directory是基于Windows域的目录服务,具有用于进行身份验证和授权的服务。用户登录到Windows域中的计算机,并且活动目录通过LDAP检查提交的密码,如果用户名和密码有权访问,则活动目录允许它使用所需的服务。

 

Windows域名

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

 

联合身份提供商

联合身份是一种在用户身份(用户名和密码)与其他身份管理之间建立链接?#21592;?#23545;用户进行身份验证并通知源节点用户?#34892;?#30340;技术。这意味着您只能拥有一个用户名和密码,并且可以在多个网站上?#34892;А?#21333;点登录是联合身份的子集。

 

的U-Prove

U-Prove是一种?#29992;?#25216;术,可以显示有关想要浏览多个网站的用户的最低信息,尤其是当用户与身份提供商进行?#25442;?#26102;。U-Prove很难跟踪用户想要做什么。U-Prove令牌使用两个功能?#29992;?#20449;息。首先,没有相关处理的信息的?#29992;?ldquo;包装”导致避免跟踪用户。其次,用户在验证者政策过程?#20449;?#38706;其信息的最小值,例如“年龄”,而没有明确显示“出生日期”。 

 

OpenID的

OpenID是一种允许用户继续其他网站认证过程的协议,被称为“?#35272;?#26041;”,作为第三方,如谷歌,微软,Facebook,美国在线等。

 

无国籍和有状态

无状态是一种通信协议,在客户端和服务器之间建立独立的请求和响应。它不需要服务器来保持其关于请求者和响应者之间的通信的信息,而状态需求服务器则保持关于其状态的信息。互联网协议,互联网和超文本传输​​协议的IP基础,HTTP,网络上数据通信的基础是无国籍的例?#21360;?#20256;输控制协议TCP是有状态的示例,它在客户端和服务器之间提供可靠且错误检查的通信。 

 

结论

我在我的应用程序中使用了最流行的?#29992;?#25216;术之一作为AES。AES是一种对称?#29992;?#21151;能,通过在发送方和接收方使用相同的密钥,AES产生强大的密钥,黑客无法?#24179;?#23427;。因此AES是保持数据机密和完整性的好方法。

在整个网络上传输用户信息更安全的最佳方法转载<\/script>');

数据库阅读排行

最新文章

加拿大快乐8最快开奖