2023-08-01

CMOS密码破解

方法一:一、更改硬件配置

当丢失CMOS密码时,你可以先试着改动机器的硬件后再重新启动,因为启动时如果系统发现新的硬件配置与原来的硬件配置不相同,可能会充许你直接进入CMOS重新设置而不需要密码。改动硬件配置的方法很简单:比如拔去一根内存条或安装一块不同型号的CPU(当然要主板支持)、更换一块硬盘等。

方法二:DEBUG法

在DOS提示符下,运行DEBUG后输入: —o70 18 —o71 18 —q 或 —o70 21 —o71 21 —q

  退出到DOS提示符后重新启动计算机便将CMOS密码完全清除了。请注意,70和71是CMOS的两个端口,我们可以向它们随意写入一些错误数据(如20、16、17等),就会破坏CMOS里的所有设置。

四、万能密码

 AMI 的BIOS: AMI ;Sysg   AWARD的BIOS: award ; Syxz; h996; wantgirl;eBBB ; dirrid 。   以上万能密码在386、486、奔腾主板上破解CMOS口令几乎百发百中,而对PII级或以上的主板就不那么灵光了,能破解PII以上的新主板的万能密码很少,几乎还没有听说过,不过小弟找到一个口令——abaubjao,已成功破解了承启6ATA4(PIII)、伟格MVP4(K6—2)、奔驰160A、160A+(PIII)等十余块主板上的CMOS口令,不敢独享,在此献给大家。

六、放电   如果你运气太差,用以上方法都破解不了CMOS口令,那就只有这一条路可走了。翻开主板说明书,找到清除CMOS设置的那个跳线,按说明书所述改变其短接的方法,清空CMOS。

什么,你的主板太老,没有此跳线? 那就将主板上那块钮扣电池取下来吧。 放电后怎么开不了机? 将电池安回去嘛,笨!

2015-12-17

基于双线性配对的密码学算法

1、数据加密原理

  我们将构建一个高效无证书签密方案。因为转换不能识别的范式加密和签名方案成组合证书协议,我们采用扩展传统的签密法的做法用无证书密钥验证机制,以基于身份的技术来配对验证关联的公共密钥。

  传统的密码系统按照用户选择自己的私钥范式,计算对应的公钥,并提交给认证机构,其验证他们的身份,并颁发证书连接这些身份和公共密钥。此在创建一个认证的基础设施需要数字证书管理(也被称为公钥基础结构,或PKI)可能被证明繁琐的维护。沙米尔引入的基于身份的(IB)密码学的概念在试图减轻PKI的负担。在IB加密,私钥不是由用户选择的,而是发出由受信任的权威称为密钥生成局(KGB)或信托机构(TA)和公共密钥由任意的字符串替换代表用户的身份,避免需要证书完全。在另一方面,它具有隐含建立一个密钥托管机构的缺点,由于克格勃具有从任何用户恢复机密信息的能力。

  我们遵循一个相当独特的方法,设计一个无证书签密方法。代替与结合基于身份的加密方法的同样基于身份的签名方案,并将结果转换为无证书协议中,我们与传统的签名延长证书的加密方法方案,但要避免使用证书后者组件使用基于身份的技术来验证公共验证密钥。

   无证书公钥密码体制是在基于身份的公钥密码体制的基础上提出来的一类新型公钥密码体制。它既保持了基于身份的公钥密码体制不需要使用公钥证书的优点, 又较好地解决了它所固有的密钥托管问题。签密把公钥加密和数字签名有机结合在一起, 能够在一个合理的逻辑步骤内同时完成公钥加密和数字签名两项功能, 而其计算量和通信成本都要低于传统的“先签名后加密”模式。

  在基于身份的加密体制中,发送者可以在接收者还没有私钥的情况下加密一个消息给接收者,接收者可以在收到密文之后,才向PKG申请私钥进行解密,这是基于身份的密码体制的一个重要特征。而无证书加密体制,设置私钥和设置公钥在设置秘密值之后运行,都有用户自己来完成,用户的私钥实际上用有两部分,解决了基于身份的密码体制中的秘钥托管问题,也消除了基于PKI的密码体制中的公钥证书了。

2、加密算法改进

将BLMQ体制签名、SCHorr签名和zheng签名结合的无证书签名方案,并参照Al-Riyami和Paterson的原始CL-PKC模型,使用户可以为了基于身份认证的密钥和各自的身份而独立的选择常见却未认证的密钥对,这些密钥可以通过基于身份的原理来验证是否有效。

鉴于本系统的运用场景,在原有的方案上进行了优化,增加了参数,在解密部分进行先验证后解密的方案,目的在于提高加解密效率,只对验证为真实的消息进行解密。

3、 加密算法方面

  (1)本项目构建高效的无证书加密方案,相对于一般的范例,将基于身份的加密和签名方案转变为组合的无证书协议,采用无证书加密验证机制扩展传统签名加密方法,根据基础的基于身份认证的技术,配对用于验证相关的公钥。只要这个验证的应摊成本很低,结果会像基础的加密一样的高效。

  (2)它既保持了基于身份的公钥密码体制不需要使用公钥证书的优点,又较好地解决了它所固有的密钥托管问题.签密把公钥加密和数字签名有机结合在一起,能够在一个合理的逻辑步骤内同时完成公钥加密和数字签名两项功能,而其计算量和通信成本都要低于传统的"先签名后加密"模式.

  (3)使用基于双线性配对的无证书签名加密算法使用到无线传感器网络中。构建一个高效的无证书加密方案,相对于一般的范例,将基于身份的加密和签名方案转变为组合的无证书协议,采用无证书加密验证机制扩展传统签名加密方法,根据基础的基于身份认证的技术,配对用于验证相关的公钥。只要这个验证的应摊成本很低,结果会像基础的加密一样的高效。

  (4)在将PBC加密算法植入内存和处理速度有限的无线传感器中(无线传感器使用51内核),其中的ROM由于只有4K并且还要处理传感器自身的信息发送、传感器信号的检测及外设器件的状态监管,因此在无线传感器网路中使用极有挑战性。

2015-09-23

几种电子邮件加密方式

加密使邮件只能被指定的人进行浏览,确保邮件的安全。

目前常见的邮件加密方式有以下三种:

第一种:利用对称加密算法加密邮件

对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。利用对称密码算法对电子邮件进行加密,需要解决密码的传递,保存、交换。这种方式的邮件加密系统目前很少使用。

第二种:利用PKI/CA认证加密加密邮件

电子邮件加密系统目前大部分产品都是基于这种加密方式。PKI(Public Key Infrastructure)指的是公钥基础设施, CA(Certificate Authority)指的是认证中心。PKI从技术上解决了网络通信安全的种种障碍;CA从运营、管理、规范、法律、人员等多个角度来解决了网络信任问题。由此,人们统称为“PKI/CA”。从总体构架来看,PKI/CA主要由最终用户、认证中心和注册机构来组成。 PKI/CA的工作原理就是通过发放和维护数字证书来建立一套信任网络,在同一信任网络中的用户通过申请到的数字证书来完成身份认证和安全处理。注册中心负责审核证书申请者的真实身份,在审核通过后,负责将用户信息通过网络上传到认证中心,由认证中心负责最后的制证处理。证书的吊销、更新也需要由注册机构来提交给认证中心做处理。总的来说,认证中心是面向各注册中心的,而注册中心是面向最终用户的,注册机构是用户与认证中心的中间渠道。公钥证书的管理是个复杂的系统。一个典型、完整、有效的CA系统至少应具有以下部分:公钥密码证书管理;黑名单的发布和管理;密钥的备份和恢复;自动更新密钥;历史密钥管理;支持交叉认证,等等。PKI/CA认证体系相对成熟但应用于电子邮件加密系统时也存在着密匙管理复杂,需要先交换密匙才能进行加解密操作等,著名的电子邮件加密系统PGP就是采用这套加密流程进行加密。这种加密方法只适用于企业、单位和一些高端用户,由于CA证书获得麻烦,交换繁琐,因此这种电子邮件加密模式一直很难普及。

第三种:利用基于身份的密码技术进行电子邮件加密

为简化传统公钥密码系统的密钥管理问题,1984年,以色列科学家、著名的RSA体制的发明者之一A. Shamir提出基于身份密码的思想:将用户公开的身份信息(如e-mail地址,IP地址,名字……,等等)作为用户公钥,用户私钥由一个称为私钥生成者的可信中心生成。在随后的二十几年中,基于身份密码体制的设计成为密码学界的一个热门的研究领域。目前这种方式是最有希望实现电子邮件加密规模应用的方式。比较有代表性的国内有赛曼邮件天使系统。

2008-10-08

RSA算法

它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。 一、RSA算法 : 首先, 找出三个数, p, q, r, 其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数...... p, q, r 这三个数便是 private key 接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1)..... 这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了..... 再来, 计算 n = pq....... m, n 这两个数便是 public key 编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a < n.... 如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t), 则每一位数均小於 n, 然後分段编码...... 接下来, 计算 b == a^m mod n, (0 <= b < n), b 就是编码後的资料...... 解码的过程是, 计算 c == b^r mod pq (0 <= c < pq), 於是乎, 解码完毕...... 等会会证明 c 和 a 其实是相等的 :) 如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b...... 他如果要解码的话, 必须想办法得到 r...... 所以, 他必须先对 n 作质因数分解......... 要防止他分解, 最有效的方法是找两个非常的大质数 p, q, 使第三者作因数分解时发生困难......... <定理> 若 p, q 是相异质数, rm == 1 mod (p-1)(q-1), a 是任意一个正整数, b == a^m mod pq, c == b^r mod pq, 则 c == a mod pq 证明的过程, 会用到费马小定理, 叙述如下: m 是任一质数, n 是任一整数, 则 n^m == n mod m (换另一句话说, 如果 n 和 m 互质, 则 n^(m-1) == 1 mod m) 运用一些基本的群论的知识, 就可以很容易地证出费马小定理的........ <证明> 因为 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) 1, 其中 k 是整数 因为在 modulo 中是 preserve 乘法的 (x == y mod z and u == v mod z => xu == yv mod z), 所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1) 1) mod pq 1. 如果 a 不是 p 的倍数, 也不是 q 的倍数时, 则 a^(p-1) == 1 mod p (费马小定理) => a^(k(p-1)(q-1)) == 1 mod p a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q 所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1 即 a^(k(p-1)(q-1)) == 1 mod pq => c == a^(k(p-1)(q-1) 1) == a mod pq 2. 如果 a 是 p 的倍数, 但不是 q 的倍数时, 则 a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q => c == a^(k(p-1)(q-1) 1) == a mod q => q | c - a 因 p | a => c == a^(k(p-1)(q-1) 1) == 0 mod p => p | c - a 所以, pq | c - a => c == a mod pq 3. 如果 a 是 q 的倍数, 但不是 p 的倍数时, 证明同上 4. 如果 a 同时是 p 和 q 的倍数时, 则 pq | a => c == a^(k(p-1)(q-1) 1) == 0 mod pq => pq | c - a => c == a mod pq Q.E.D. 这个定理说明 a 经过编码为 b 再经过解码为 c 时, a == c mod n (n = pq).... 但我们在做编码解码时, 限制 0 <= a < n, 0 <= c < n, 所以这就是说 a 等於 c, 所以这个过程确实能做到编码解码的功能..... 二、RSA 的安全性 RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n 必须选大一些,因具体适用情况而定。 三、RSA的速度 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 四、RSA的选择密文攻击 RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构: ( XM )^d = X^d *M^d mod n 前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction 对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不同类型的攻击方法。 五、RSA的公共模数攻击 若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则: C1 = P^e1 mod n C2 = P^e2 mod n 密码分析者知道n、e1、e2、C1和C2,就能得到P。 因为e1和e2互质,故用Euclidean算法能找到r和s,满足: r * e1 s * e2 = 1 假设r为负数,需再用Euclidean算法计算C1^(-1),则 ( C1^(-1) )^(-r) * C2^s = P mod n 另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享模数n。 RSA的小指数攻击。 有一种提高 RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有 所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。 RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET( Secure Electronic Transaction )协议中要求CA采用比特长的密钥,其他实体使用比特的密钥。

C#中的DES加密与解密

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class FileEncrypt {
public static Byte[] ConvertStringToByteArray(String s)
{
return (new UnicodeEncoding()).GetBytes(s);
}
public static void Main()
{
//创建文件流
FileStream fs = new FileStream("EncryptedFile.txt",FileMode.Create,FileAccess.Write);
Console.WriteLine("输入一些要存储在加密文件中的文本::");
String strinput = Console.ReadLine();
Byte[] bytearrayinput=ConvertStringToByteArray(strinput);
//具有随机密钥的 DES 实例
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//从此实例创建 DES 加密器
ICryptoTransform desencrypt = des.CreateEncryptor();
//创建使用 des 加密转换文件流的加密流
CryptoStream cryptostream = new CryptoStream(fs,desencrypt,CryptoStreamMode.Write);
//写出 DES 加密文件
cryptostream.Write(bytearrayinput,0,bytearrayinput.Length);
cryptostream.Close();
//创建文件流以读回加密文件
FileStream fsread = new FileStream("EncryptedFile.txt",FileMode.Open,FileAccess.Read);
//从此 des 实例创建 DES 解密器
ICryptoTransform desdecrypt = des.CreateDecryptor();
//创建加密流集合以便对传入的字节进行读取并执行 des 解密转换
CryptoStream cryptostreamDecr = new CryptoStream(fsread,desdecrypt,CryptoStreamMode.Read);
//输出已解密文件的内容
Console.WriteLine( (new StreamReader(cryptostreamDecr, new UnicodeEncoding())).ReadToEnd() );
Console.WriteLine ();
Console.WriteLine ("按 Enter 键继续...");
Console.ReadLine();
}
}

DSA算法

Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。算法中应用了下述参数: p:L bits长的素数。L是64的倍数,范围是512到1024; q:p - 1的160bits的素因子; g:g = h^((p-1)/q) mod p,h满足h < p - 1, h^((p-1)/q) mod p > 1; x:x < q,x为私钥 ; y:y = g^x mod p ,( p, q, g, y )为公钥; H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。 p, q, g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及验证协议如下: 1. P产生随机数k,k < q; 2. P计算 r = ( g^k mod p ) mod q s = ( k^(-1) (H(m) xr)) mod q 签名结果是( m, r, s )。 3. 验证时计算 w = s^(-1)mod q u1 = ( H( m ) * w ) mod q u2 = ( r * w ) mod q v = (( g^u1 * y^u2 ) mod p ) mod q 若v = r,则认为签名有效。 DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到。

ASP.NET中的MD5和SHA1摘要算法的用法

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。

加密哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。加密哈希函数有这样一个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。所以你很难从加密后的文字中找到蛛丝马迹。

SHA1的全称是Secure Hash Algorithm(安全哈希算法)

MD5算法的哈希值大小为128位。而SHA1算法的哈希值大小为160位。两种算法都是不可逆。

虽说2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。但是我觉得对于我们做普通的软件来说,这个加密安全程度已经足够使用了。

我们平常用的最多的无非就是加密用户密码,把加密好的密码存储到数据库中,进行密码比较的时候,把用户输入的密码再进行加密,然后与数据库中的密文进行比较。至于asp.net类中是如何实现加密算法的,这个我们不需要关心,会用就行了。

下面就是Asp.net中几种加密方法。加密算法有两种,也就是上面提到的MD5和SHA1,这里我举的例子是以MD5为例,SHA1大致相同,只是使用的类不一样。

MD5相关类:

System.Security.Cryptography.MD5 System.Security.Cryptography.MD5CryptoServiceProvider() System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5")

SHA1相关类:

System.Security.Cryptography.SHA1 System.Security.Cryptography.SHA1CryptoServiceProvider() System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "SHA1")

方法如下:(用的vs 2005)

1/**////

2 /// 方法一:通过使用 new 运算符创建对象 3 ///

4 /// 需要加密的明文 5 /// 返回16位加密结果,该结果取32位加密结果的第9位到25位 6 public string Get_MD5_Method1(string strSource) 7 { 8  //new 9  System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); 10 11  //获取密文字节数组 12  byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strSource)); 13 14  //转换成字符串,并取9到25位 15  string strResult = BitConverter.ToString(bytResult, 4, 8); 16  //转换成字符串,32位 17  //string strResult = BitConverter.ToString(bytResult); 18 19  //BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉 20  strResult = strResult.Replace("-", ""); 21  return strResult; 22 } 23 24 /**////

25 /// 方法二:通过调用特定加密算法的抽象类上的 Create 方法,创建实现特定加密算法的对象。 26 ///

27 /// 需要加密的明文 28 /// 返回32位加密结果 29 public string Get_MD5_Method2(string strSource) 30 { 31  string strResult = ""; 32 33  //Create 34  System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); 35 36  //注意编码UTF8、UTF7、Unicode等的选择  37  byte[] bytResult = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource)); 38 39  //字节类型的数组转换为字符串 40  for (int i = 0; i < bytResult.Length; i ) 41  { 42 //16进制转换 43 strResult = strResult bytResult[i].ToString("X"); 44   } 45  return strResult; 46 } 47 48 /**////

49 /// 方法三:直接使用HashPasswordForStoringInConfigFile生成 50 ///

51 /// 需要加密的明文 52 /// 返回32位加密结果 53 public string Get_MD5_Method3(string strSource) 54 { 55  return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5"); 56 }

这些加密函数都是在服务器端执行,也就是说,当用户输入密码后,从客户端到服务器端传输时,用户的密码没有任何保护,很危险。银行的做法是在客户端安装ActiveX控件,在客户端就把一些重要信息进行加密,再发送。

加密狗的加密方法

针对于使用加密狗的解密有什么方法? 1、硬件复制 复制硬件,即解密者复制Sentinel Superpro相同的加密锁。由于加密锁采用了彩虹公司专用的ASIC芯片技术,因此复制该加密锁非常困难,且代价太大。 2、监听 解密者利用并口监听程序,进行解密,其工作机制是: 监听程序,记录应用程序对并口发的查询串和加密锁发回的响应串。当移去加密锁时,如果程序再对并口发查询串确认身份时,监听程序返回所记录的响应串。程序认为加密锁仍然在并口上,是合法用户继续运行,应用程序也就被解密了。 3、打印机共享器 将加密锁插在打印机共享器上,多台计算机共同使用打印机共享器上的一把加密锁。(后面简述对抗策略) 4、DEBUG 解密者DEBUG等反编译程序,修改程序源代码或跳过查询比较。应用程序也就被解密了。 对于以上的几种解密方法加密者可以考虑使用以下几种加密策略: 1、针对上述监听和DEBUG问题解密方法,本人推荐充分利用加密狗开发商的API函数调用的加密策略: a、针对并口监听程序 1)对加密锁进行算法查询 Ø正确的查询响应验证 用户生成大量查询响应对,如200对。在程序运行过程中对激活的加密算法单元随机的发送在200对之中的一对“345AB56E”―――“63749128”。查询串“345AB56E”,哪么算法单元返回的下确的响应串应该是“63749128”,若是,则程序认为加密锁在并口上,是合法用户,继续运行,反之终止程序。 Ø随机非激活算法验证 我们对非激活的加密锁算法单元发随机生成的查询串,如:“7AB2341”,非激活算法单元只要是有查询就会有响应串。因此返回响应串“7AB2341”,在程序中判断响应串与查询串是否相同,如果相同,则证明我们的加密锁仍然在口上。继续运行程序。 Ø随机激活算法验证 假设监听程序了解了上面的机制。即对非激活的加密算法我们发什么查询串则返回相同的响应串。哪么我也有对策。对激活的加密算法单元发随机生成的查询串,如:“345AB56E”由于是激活算法响应串肯定与查询串肯定不等。所以假如返回响应串“7253ABCD”,在程序中判断响应串与查询串是否不同,如果不同,则证明我们的加密锁仍然在并口上,继续运行程序。 上面三种加密策略在程序同时使用,相符相承,相互补充。即使监听程序记录下来我们的部分查询响应。 2)分时查询 用户把查询响应对分组,如120对分为4组。每30对一组。头三个月使用第一组,第二个月三个月使用第二组以此类推,监听程序就算记录了头三个月。第二个月三个月以后程序仍然无法使用。 也可以再生成100对“临时委员”,每次运行随意抽出1对与以上分组结合使用。使记录程序在三个月内也无法记录完全。程序也无法使用。 3)随机读写存储单元 为了防监听程序。我们的策略是:程序在启动时,我们利用随机函数随机生成的一个数,假设是“98768964”。我们在指定的18#单元写入这个数。哪么我们在程序运行中,每调用一个功能程序前读取18#单元,数判定是否是我们写入的数“98768964”。因为每次写入的数是随机生成的,所以监听程序记录不到当次启动时写入的随机数,它返回的数肯定是一个不匹配的数。我们就可以就此判定是否是合法用户。Sentinel Superpro加密锁可以重复写10万次以上。也就是说每天写三次也可以使用一百年。 2、针对打印共享器的加密策略 为了防打印共享器。我们的策略是:程序在启动时,我们利用随机函数随要生成的一个数,假设是“7762523A”。我们在指定的34#单元写入这个数。哪么在程序运行中,每调用一个功能程序前读取34#单元,以判定是否是我们写入的数“7762523A”。以此判定是否是合法用户。因为每次写入的数随机生成的,同时使用打印共享器的其他非法用户的程序一进入也会写入一个不同的随机数。那么第一个用户的程序在校验是否是第一个用户写入的数时,就会被认为是非法的用户。所以在一个阶段也只是一个程序使用。(例如RAINBOW公司开的Sentinel Superpro加密锁可以重复10万次以上。也就是说每天写三次也就可以使用一百年。) 3、针对DEBUG跟踪的加密锁的安全策略 1)分散法 针对DEBUG跟踪。在调用每个重要功能模块前,我们建议要对加密锁进行查询,校验身份。如果只在程序开始部分校验身份,DEBUG跟踪程序部分可以轻易的跳过校验部分,而一些不良用户可以在验证后可以将加密锁拔下用在其它计算机。 2)延时法 针对某一具体查询校验,都有三步骤: Ø查询得到响应串 Ø比较响应串和查询串是否匹配 Ø执行相应的步骤 我们建议以上三个步骤要延时执行。最好鼗三步骤相互远离些,甚至放到不同的子程序或函数中。例如:我们执行“查询得到响应串” 后,相隔50执行“比较响应串和查询串是否匹配”。假如程序需要调用一个函数。哪么我们就在这个函数里执行“执行相应的步骤”。这样程序更难于被破解。 3)整体法 将响应串作为程序中数据使用。 例如:我们有返回值“87611123”,而我们程序需要“123”这个数。我们可以让“87611123”减去“8761000”得到“123”。这样以来任何对加密程序的修改都会使程序紊乱。 4)迷惑法 一般情况下我们的程序执行相应的验证步骤。验证是非法用户就会退出。这样很容易被发现代码特征。我们知道是非法用户后继续执行一些无用的操作使程序紊乱。以迷惑解密者。 以上为现如今软件开发商使用硬件加密狗(加密锁)进行软件保护时可以使用的几种切实可行的几种加密策略。

加密锁加密技术简介

市场上的加密锁大致分为两种类型:带CPU加密锁,不带CPU的加密锁。前者拥有计算能力,对加密数据、过程数据、通讯接口等可以实施动态密文处理,因此带CPU的加密锁也被演化出了多种多样的加密形式:密文校验、自定义算法、程序移植等等。而不带CPU加密锁相对简单,加密强度较低,成本低廉! 加密锁的克隆 不带CPU加密锁实际上是一个外接的存储单元,用户在使用了正确的方法后可以与内部存储交换数据,以达到加密的目的。这种加密锁,不论其软件加密强度高低,从硬件的角度来说属于低端产品,一般加密公司的低端产品皆属此类。如果破解者找到办法可以把加密锁中的数据读出来(前提是这个硬件高手可以找到办法),那么这个加密狗也就被破掉了,制作出一个完全相同的加密锁,这种方法我们熟称为加密锁的“克隆”。加密锁客隆技术的产生使加密锁技术发展进入了一个新的时代,新类型的软件加密锁大多都有密码或硬ID号的保护,只要黑客买不到相同密码的加密锁,也就无法进行加密锁的“克隆”了。 加密锁的仿真、模拟 那么,加密锁的厂家是否可以安枕无忧了呢?不是的,解密者又找到了新的突破口。因为软件要同加密锁进行通讯,必须要通过通讯口来进行,黑客利用这一弱点编制出了加密锁仿真程序,它的工作原理是首先插上保护软件原有的软件锁运行一遍,而后台的程序会记录下所有的写入/读出的数据。然后取下加密锁,启动仿真程序,让仿真程序来模拟加密锁提供所有的数据。为此,“蓝芯金盾加密锁”采用了源程序级加密,此方法不是去判断某个值、某个字符串或数据是否正确,而是时时变化输入参数,在任何时刻没有两个相同的数据出现。 自定义算法加密锁 现在市场上还提供一种开发者可自定义算法的加密锁。开发者可以把自己的算法写入到加密锁中,在软件中调用这些算法来实现特有的计算工作。这种加密锁的实际原理是将一组数据(开发者的算法编译码)下载到加密锁的特定外部存储器,这种方法有它的局限性,因为外部存储器用专门的设备总是可以被读出来的,安全强度的高低仍然依仗在硬件读取方法的寻找上。“蓝芯金盾加密锁”可以为有特殊需要的用户编写专门的加密函数,更安全地将用户要求融入加密锁中,用户使用加密锁不是去判断加密锁是否正确,而是由加密锁实现用户软件的特定功能。 实际上加密锁的好坏仅仅是一个方面,不论加密锁提供的功能有多丰富,加密性有多好,更主要的是使用者,因为软件毕竟是要被人用的。希望所有的加密锁使用者能够更好的使用他的加密锁来完成对自己软件的保护。 加密技术 → 在很少使用的代码中调用加密锁。那么看似已破译的程序就会经常发生异常现象。 → 根据时间调用加密锁。上午调用的数据下午(或隔日)使用。破译者为了分析这种数据就要花一天或几天的时间。这就可以拖垮破译者。 → 加密锁校验函数不宜定义成一个单独函数,而宜定义成若干个小函数分散使用。 → 检查程序代码的校验和,以防非法修改。 → 以各种不同的随机访问掩护真实的加密锁访问。对随机询问的答复进行处理,但不真正使用它。 → 可在加密锁里的多个地址预先写入不同数据,校验锁时可以随机地对其中的某个地址进行校验。(如可随机产生一个数,再根据该数来决定对锁里哪个地址的值进行校验。) → 在程序中不同的地方对加密锁进行检测,即多点加密。这个方法可配合方法一使用。 → 在您程序的运行过程中,您可以定时、不定时地对加密锁进行随机检测。 → 您从加密锁取得返回数据后,并不立即判定,而是在后来才去判定是否正确;在判定加密锁错误时,并不立即提示或退出,而是在以后提示或退出或程序照常运行但出现偏差或溢出等等错误。 → 可以将加密锁返回值作为数组的索引、常量、计算单元和校验码;可以将加密锁返回值作为指针来控制程序执行或作为在不同表中跳转的索引;也可以使用加密锁返回值来加密或解密部分代码或数据。加密锁返回值使用后立即删除。 加密锁原理 有一种加密锁是把用户定制(根据密码系数变换密码算法)密码算法写入加密锁中,并以程序的形式对调用者进行身份验证。 加密方式 内嵌式 这种加密方法要求具有源程序,在被加密程序中访问加密锁。加密锁的驱动光盘中提供VC\VB\VFP\Delph\PB\CB等各种言的编程接口及详细的示例供客户参考。如果您有什么特殊要求可与我们联系。 外壳式 外壳加密是一种直接对可执行文件(.exe.com.dll)加密的加密方法。这种方法不需要源程序,加密过程简单方便。 文件加密 在加密锁动态连接库中提供了文件加密和解密函数。函数中隐去了 HASH和RSA密码算法的实现细节,安全性极高且使用方便。用户只需输入文件名和口令即可。 反破译---文件完整性检测 用程序的完整性检测码防止文件被非法篡改。 定义1:运行检测码--程序运行时的完整性检测码。 定义2:发行检测码--程序发行时的完整性检测码。 检测原理:根据程序完整性检测程序是否被修改--在程序发行前计算程序的“发行检测码”,在程序发行后运行时自动计算程序的“运行检测码”。如果 “运行检测码”等于“发行检测码” 则程序完整性检测正确,程序没有被修改。如果“运行检测码”不等于“发行检测码”则程序完整性检测错误,程序被修改。

用MD5为GRUB设置密码

在命令行输入grub,进入GRUB界面,输入md5crypt(或password --md5),然后输入你的密码(注意输入密码要小心,因为只能输入一次),产生一个md5加密字符串,把它复制下来。 打开/boot/grub/grub.conf,在title子句后加入lock 和 password --md5子句,结果如下: title CentOS (2.6.9-42.0.3.EL) lock password --md5 $1$G7A00$S9iQ9fN9IME2gpECHS7CV1 root (hd0,9) kernel /vmlinuz-2.6.9-42.0.3.EL ro root=LABEL=/ rhgb quiet initrd /initrd-2.6.9-42.0.3.EL.img

重新启动后,就必须输入正确的密码才能进入CentOS (2.6.9-42.0.3.EL)了。

加密和数字签名的区别

加密是一种以密码方式发送信息的方法。只有拥有正确密钥的人才能解开这个信息的密码。对于其他人来说,这个信息看起来就像是一系列随机的字母、数字和符号。如果你要发送不应该让其他人看的敏感信息时,加密是特别重要的。由于电子邮件是在互联网上发送的,可能被攻击者拦截,对敏感的信息增加一个额外的保护层是很重要的。

  同数字签名一样,公共密钥加密使用PGP等软件,使用数学算法转换信息并且依靠公共和专用密钥。但是,加密和数字签名是有区别的,加密的目的是通过把信息翻译成密码秘密地隐藏内容。数字签名的目的是完整性和身份识别性,验证一个信息的发送者和指出内容没有被修改。虽然加密和数字签名能够单独使用,但是,你还可以对加密的信息采用数字签名。

  当你签署一个信息时,你使用你的专用密钥,任何有你的公共密钥的人都能够验证这个签名是合法的。当你加密一个信息的时候,你为接收你的信息的人使用这个公共密钥,并且使用他或者她的专用密钥解码这个信息。用于人们要保持自己的专用密钥的机密,并且使用口令保护这些密钥,这个信息的接收者应该是惟一的能够观看这个信息的人。

  加密是如何生效的?

  1.获得你要他能够阅读这个信息的人的公共密钥。如果你从一个公共密钥环得到这个密钥,你可以直接与那个人取得联系,使用密钥验证一系列有关的字母和数字是正确的指纹。

  2.使用他们的公共密钥加密这个电子邮件。大多数电子邮件客户端软件都有轻松进行这项工作的功能。

  3.当这个人收到这个信息的时候,他或者她将能够对这个信息解密。