jjzjj

python - 是否可以在服务器上加盐和/或散列 HOTP/TOTP secret ?

coder 2023-08-16 原文

我正在构建一个基于 TOTP/HOTP 的双因素身份验证系统。 为了验证 otp,服务器和 otp 设备都必须知道共享 key 。

由于 HOTP 密码与用户密码非常相似,我认为应该应用类似的最佳实践。特别是强烈建议永远不要存储未加密的密码,只保留密码的加盐哈希值。

RFC 和 HOTP/TOTP 的 python 实现似乎都没有涵盖这方面。

有没有一种方法可以使用 OTP 共享 key 的单向加密,或者这是一个愚蠢的想法?

最佳答案

Is there a way to use one-way encryption of the OTP shared secret...?

不是真的。您可以使用可逆加密机制,但这可能没有多大意义。

你只能散列一个 HMAC如果客户端通过网络发送完整的未散列的 HMAC key 进行身份验证,则服务器上的 key ,这通常是基于密码的身份验证的工作方式,但这很容易受到重放攻击,这正是 HOTP/TOTP 旨在避免的。

why do we apply 1-way function to a password before storing it (salt+hash)...?

这实际上是个好问题。

我认为这是因为早期版本的 Unix 操作系统将其所有密码信息存储在一个“世界可读”的 /etc/passwd 文件中,因此显然必须对其进行混淆处理在某种程度上,salt+hash 恰好是他们选择的方法。

如今,人们通常不会如此自由地提供他们的密码文件,因此可以说根本不需要对它们进行哈希处理。

然而,还有一个混淆它们的原因,那就是密码通常是由人类选择的,因此为了方便起见,它们通常会为多个系统选择相同的密码。我怀疑 HMAC key 也是如此,它们(希望)是使用更强大的加密机制选择的。

因此,如今散列密码的主要原因与其说是为了提高系统的安全性,不如说是为了降低危及用户在其他系统上的安全的风险,如果您的系统已被破坏。

如果攻击者可以从您的系统中读取明文密码,这对他们来说可能没有多大用处,因为无论如何他们也可能读取系统上的所有其他内容。

但是,如果在另一个系统上也使用了相同的密码,那么您可能已经为攻击者提供了破坏该系统的方法。

如果可以相信人类不会对多个系统使用相同的密码,那么可能根本不需要对它们进行哈希处理,但我认为假设这种情况有可能发生有点乐观。 :-)

关于python - 是否可以在服务器上加盐和/或散列 HOTP/TOTP secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962195/

有关python - 是否可以在服务器上加盐和/或散列 HOTP/TOTP secret ?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  4. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  5. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  6. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  7. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  8. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  9. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  10. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

随机推荐