使用公开可见的功能确定性地生成安全密码

时间:2013-07-23 21:09:16

标签: matlab cryptography

我想避免存储我的密码列表,而是使用公开可见的MATLAB函数可靠地重新生成它们。此函数使用一个未存储在任何地方的密钥来设置随机数生成器的种子。

这是一种在我需要时重新生成帐户密码的安全方法吗?安全我的意思是,它比知道我的秘密密钥的人更容易受到攻击吗?

% Start with a blank slate
clear all
clc

% {url, #symbols, #upper, #lower, #numbers}
accounts = { ...
    'www.foo.com', [3,3,3,3]; ...
    'www.bar.com', [0,4,4,4]; ...
    'www.box.com', [0,2,3,2]; ...
    };
key = input('Secret Key: ', 's');
acc = input('Account Name (URL): ', 's');
% Clear display immediately
clc

% Allowed characters
s = { ...
    '@#$%&*=+'; ...                 % symbols
    'ABCDEFGHJKMNPQRSTUVWXYZ'; ...  % upper
    'abcdefghjkmnpqrstuvwxyz'; ...  % lower
'123456789' };                  % numbers

% Find matching accounts
idx = strfind(accounts(:,1), acc);

% Generate password for each matching account
for j = 1:length(idx)
    if isempty(idx{j})
        % Skip if there is no matching account
        continue
    end

    % Salted random number generator seed
    rng(sum([key, ': ', accounts{j,1}]), 'twister');

    ns = accounts{j,2};
    n = sum(ns);

    % Construct password
    p = '';
    for k = 1:length(s)
        v = s{k};
        p = [p v(randi(length(v),1,ns(k)))];
    end
    p = p(randperm(n));
    fprintf('Password for %s is %s\n', accounts{j,1}, p)
end

% Clear all variables for safety
clear all

例如,上面的原型结果为

Password for www.foo.com is q*PZry4@8%3F
Password for www.bar.com is 8nZ8NWa6C8am
Password for www.box.com is wUw3Bn9

每次我使用输入运行我的MATLAB代码:

Secret Key: MySecretKey
Account Name (URL): www

2 个答案:

答案 0 :(得分:0)

好的程序,最薄弱的一点可能不是算法,而是你使用它的方式。

显然,在matlab命令窗口中输入/打印密码并不是很安全。保留日志文件,可能会以某种方式删除您的密码。此外,如果您在自己的家外使用密码,密码在某个时间可见是一个相关的弱点。

秘密密钥可能会因此而隐藏passwordentrydialog。但是如果你真的想要使用生成的传递,你需要直观地观察它或将它放在剪贴板上。在公共场所可能不是很好。


从技术角度来看,如果你把它放在架子上几年,Matlab可能无法生成相同的随机数。但是,如果您在卸载旧版本之前总是检查它是否可以在新版本中运行,那么应该没问题。


总而言之,我会说它可以为家庭使用提供一个很好的机制,但如果你能记住很多个人密码肯定会更安全。另请注意,有几种免费服务可以为您存储密码(受主密码保护)。

答案 1 :(得分:0)

其他人已经看过你的问题,并提出了一个不同的解决方案,例如Password Safe。您的密码是安全存储的,程序本身在使用后负责清除缓冲区等。披露:我自己使用该程序。