我们的谷歌应用引擎应用程序存储了大量的个人识别信息(电子邮件,ssn等)来识别用户.我正在寻找有关如何保护这些数据的建议.
将敏感数据存储为两种形式:
当我们需要做仰视时:
如果我们需要重新散列数据或以原始形式处理它:
保持哈希盐的秘密
如果攻击者获得数据存储区中的数据,以及我们的哈希盐,我担心他们可能会强行攻击敏感数据.其中一些(如SSN,一个9位数字)没有大的密钥空间,所以即使使用现代哈希算法,我相信如果攻击者知道盐就可以完成.
我目前的想法是将盐保持在源代码控制之外并保存在自己的文件中.该文件在部署期间加载到GAE,应用程序在需要散列传入数据时读取该文件.
在部署之间,salt文件存在于受愤怒的熊(或保险箱)保护的USB密钥上.
盐只生活在两个地方
并且在永久禁用代码下载的情况下,我无法想到有人在不偷取USB密钥的情况下获取盐的方法.我错过了什么吗?
保密我们的私人RSA密钥
不那么担心这个.我们很少需要解密加密版本(仅当我们更改哈希算法或数据格式时).
私钥永远不必触及GAE服务器,我们可以下载加密数据,在本地解密,处理它,并重新上传加密/散列版本.
我们可以将我们的RSA私钥保存在由熊和老虎守卫的USB记忆棒上,并且只在我们需要它时将它带出来.
我意识到这个问题并不完全是谷歌应用程序,但我认为GAE使情况有点独特.
如果我有完全控制权,我会做一些事情,例如锁定部署访问权限和使用双因素身份验证访问数据存储区查看器,但这些选项目前不可用(拥有GAE特定密码是好的,但我喜欢涉及RSA令牌).
我也不是GAE专家,也不是安全专家,所以如果我有一个漏洞,或者我想不出具体的平台,我很乐意听到.
我一直在努力研究SHA-256的工作原理.我一直在为其他算法做的一件事是我已经为算法制定了一种逐步的伪代码函数.
我试过为SHA256做同样的事情,但到目前为止我遇到了很多麻烦.
我试图弄清楚维基百科图如何工作,但除了解释函数的文本部分,我不确定我是否正确.
这是我到目前为止所拥有的:
Input is an array 8 items long where each item is 32 bits.
Output is an array 8 items long where each item is 32 bits.
Calculate all the function boxes and store those values.
|I'll refer to them by function name
Store input, right shifted by 32 bits, into output.
| At this point, in the out array, E is the wrong value and A is empty
Store the function boxes.
| now we need …Run Code Online (Sandbox Code Playgroud) 这似乎是一个非常noob的问题,但我无法在任何地方找到答案!
我是开发Homebrew软件包的新手,但是当我编辑我的公式并更新我的软件包时,我收到以下错误
Error: SHA256 mismatch
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何生成预期的SHA256值?
我有一个旧的应用程序,其用户密码存储在数据库中,带有MD5哈希.我想用SHA-2系列中的东西替换它.
我想到了两种可能的方法来实现这一点,但两者看起来都很笨重.
1)添加一个布尔"标志"字段.用户在此之后第一次进行身份验证时,使用SHA密码哈希替换MD5密码哈希,并设置该标志.然后我可以检查标志以查看密码哈希是否已被转换.
2)添加第二个密码字段以存储SHA哈希.用户第一次在此之后进行身份验证,使用SHA散列密码并将其存储在新字段中(可能同时删除其MD5哈希值).然后我可以检查SHA字段是否有值; 这基本上成了我的旗帜.
在任何一种情况下,对于不经常登录的任何用户,MD5身份验证都必须保留一段时间.任何不再活动的用户永远不会切换到SHA.
有一个更好的方法吗?
MD5和SHA-1哈希具有抵御冲突攻击的弱点.SHA256没有,但它输出256位.我可以安全地获取第一个或最后一个128位并将其用作哈希值吗?我知道它会更弱(因为它的位数较少),但否则会有效吗?
基本上我想用它来唯一地识别文件系统中可能有一天包含万亿个文件的文件.我知道生日问题,128位散列应该会产生大约1万亿的机会,万亿个文件会有两个不同的文件具有相同的散列.我可以忍受这些可能性.
我不能忍受的是,如果有人可以轻易地,故意地插入具有相同散列和文件的相同开头字符的新文件.我相信MD5和SHA1这是可能的.
是否可以解密(保留实际字符串)使用SHA1算法保存在db中的密码.
示例:如果密码是"password",它是存储在DB如"sha1$4fb4c$2bc693f8a86e2d87f757c382a32e3d50fc945b24",是任何机会保持相同的"password"(string)从"sha1$4fb4c$2bc693f8a86e2d87f757c382a32e3d50fc945b24"
首先,一点背景:我正在调查为什么我公司的MacOS/X应用程序(所有帐户似乎都正确签名;它在MacOS/X 10.11.x和10.12.x下正常运行; Gatekeeper在所有方面都很好用MacOS版本;"spctl --assess"和"codesign -vvvv"都表示满足其对所有操作系统版本的要求)但是当我尝试启动时,它不会在OS/X 10.10.x下启动 - 在10.10.x下它,我得到一个崩溃报告,其中dyld抱怨某些库未正确签名:
Dyld Error Message:
Library not loaded: @executable_path/../Frameworks/libcrypto.1.0.0.dylib
Referenced from: /Applications/MyApplication v123/MyApplication.app/Contents/MacOS/MyApplication
Reason: no suitable image found. Did find:
/Applications/MyApplication v123/MyApplication.app/Contents/MacOS/../Frameworks/libcrypto.1.0.0.dylib: code signature invalid for '/Applications/MyApplication v123/MyApplication.app/Contents/MacOS/../Frameworks/libcrypto.1.0.0.dylib'
Run Code Online (Sandbox Code Playgroud)
在调查这个问题时,我注意到.app/Contents/Framework中的库 - 都是使用完全相同的codesign命令签名的,通过运行OS/X 10.12的OS/X构建机器上的build/package脚本 - - 为它们计算不同类型的哈希值.
也就是说,如果我查看其中一个非Qt .dylib文件是如何签名的,我看到它只记录了一个sha256哈希:
sierrabuild-polaris:MyApp v123 autobuild$ codesign -vvvd ./MyApp.app/Contents/Frameworks/libsndfile.1.dylib
Executable=/Applications/MyApp v123/MyApp.app/Contents/Frameworks/libsndfile.1.dylib
Identifier=libsndfile.1
Format=Mach-O thin (x86_64)
CodeDirectory v=20200 size=4140 flags=0x0(none) hashes=125+2 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=b4256e9bf0fac567bb8ac86f56964c066b93d069
Hash choices=sha256 <----------------------------- ONLY 256!?
CDHash=b4256e9bf0fac567bb8ac86f56964c066b93d069
Signature size=8846
Authority=Developer ID Application: MyCompany
Authority=Developer ID …Run Code Online (Sandbox Code Playgroud) SQL Server中是否有内置的sha256功能?我也找不到sha256 T-SQL函数源代码.有替代品的人吗?
我在Android上遇到SHA-1性能问题.在C#中,我得到大约3秒的计算哈希,Android的相同计算大约需要75秒.我认为问题在于从文件中读取操作,但我不确定如何提高性能.
这是我的哈希生成方法.
private static String getSHA1FromFileContent(String filename)
{
try
{
MessageDigest digest = MessageDigest.getInstance("SHA-1");
//byte[] buffer = new byte[65536]; //created at start.
InputStream fis = new FileInputStream(filename);
int n = 0;
while (n != -1)
{
n = fis.read(buffer);
if (n > 0)
{
digest.update(buffer, 0, n);
}
}
byte[] digestResult = digest.digest();
return asHex(digestResult);
}
catch (Exception e)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何才能提高性能?
我有一个包含很多字符串的文件.我试图分别计算这些字符串的SHA1哈希值并存储它们
import hashlib
inp = open("inp.txt" , "r")
outputhash = open("outputhashes.txt", "w")
for eachpwd in inp:
sha_1 = hashlib.sha1()
sha_1.update(eachpwd)
outputhash.write(sha_1.hexdigest())
outputhash.write("\n")
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,一旦字符串SHA1被计算,下一个字符串被追加(我觉得这就是为什么我没有得到正确的哈希值)并且正在计算其哈希值.因此我没有得到正确的哈希.我是python的新手.我知道该怎么做,但不知道该怎么做.你能指出我正确的方向来解决这个问题吗?
sha ×10
hash ×5
sha256 ×3
md5 ×2
python ×2
security ×2
android ×1
codesign ×1
cryptography ×1
file ×1
homebrew ×1
macos ×1
passwords ×1
performance ×1
pseudocode ×1
rsa ×1
sha1 ×1
sql-server ×1