- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
数字签名与强命名程序集有什么关系。我读到一个强命名的程序集有公钥和数字签名。
来自Wikipedia article "Assembly (CLI)" :
"Signing the assembly involves taking a hash of important parts of the assembly and then encrypting the hash with the private key. The signed hash is stored in the assembly along with the public key. The public key will decrypt the signed hash. When the CLR loads a strongly named assembly it will generate a hash from the assembly and then compare this with the decrypted hash. If the comparison succeeds then it means that the public key in the file (and hence the public key token) is associated with the private key used to sign the assembly. This will mean that the public key in the assembly is the public key of the assembly publisher and hence a spoofing attack is thwarted."
以上信息准确吗?它没有任何对数字签名的引用。我找不到 MSDN 页面来解释如何对程序集进行签名、如何验证签名以及如何消除黑客攻击的可能性。我想了解更多。
最佳答案
强命名和数字签名都使用公钥加密来提供关于程序集来源的证据,以便您可以申请< strong>安全策略,以确定授予程序集哪些权限。
它们的区别不在于技术细节,而在于它们旨在解决的问题。
强名称的唯一目的是确保按名称加载程序集时,加载的程序集与您认为正在加载的程序集完全相同。这是强名称的唯一设计目的。您说“我想加载来自 FooCorp 的第 4 版 Frobber”。强名称 gear 可确保您实际上准确加载该 DLL,而不是来自 Dr. Evil Enterprises 的另一个称为 Frobber 版本 4 的程序集。
为了实现这一点,您只需知道与 FooCorp 的私钥关联的公钥 token 。您如何知道公钥 token 完全是您的事。没有旨在帮助您安全获取该信息的基础设施。您只是希望以某种方式知道它是什么。
来自发布者证书的数字签名的目的是建立可验证的身份和信任链。信任链从一大堆来源不明或不确定的代码一直到“受信任的根”——您已将操作系统配置为信任的实体。您下载了一些代码,该代码具有带有 FooCorp 证书的数字签名。您检查证书,上面写着“此程序来自 FooCorp。此证书的准确性由 VeriSign 担保”。由于 VeriSign 是您信任的来源之一,您现在可以确信此代码确实来自 FooCorp。
注意数字签名解决的问题要复杂得多。我们并不是要简单地确定“这个代码块是否与这个名称相关联?”相反,我们试图确定此代码从何而来,谁保证据称负责的公司的存在,以及我们是否应该信任该公司?
强名称和数字签名之间的区别强调了基于加密的安全性的难点。困难的问题不是密码学,而是密码学。那只是数学。困难的问题是安全地管理 key 信息的分布并将它们与正确的实体相关联。强大的名字,因为他们试图解决一个非常小但重要的问题,所以没有关键管理问题。或者,更确切地说,他们将 key 管理问题强加给用户。数字签名都是关于尝试通过证书自动安全分发 key 信息,以解决更复杂的信任和身份问题。
清楚了吗?
(好问题;这将在 9 月 3 日的 my blog 上发布。)
关于c# - .NET 程序集的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1334631/
C#内部访问修饰符的定义是内部:只能在包含程序集或友元程序集内访问。所以我的问题是什么是 C# 程序集?在包含程序集或 friend 程序集之内是什么意思?它是否意味着在同一个命名空间或项目中? 最佳
任何人都可以回答以下问题。我正在使用 c# 语言。 我可以将程序集调用为 .ddl 或 .exe 文件吗? 我可以将 Assembly Manifest 称为程序集吗? 程序集、元数据和程序集 lis
我正在从 Python 运行一个 .NET COM 程序集,只有当我将程序集 dll 和依赖项复制到我的 Python 根路径 c:\Python27 时才能使它正常工作。 这是不整洁的,所以我想将
作为世界上任何一名程序员,他/她一生中至少有一次,我正在尝试创建我的“革命性”,新的且唯一的操作系统。 :D 好吧,我正在使用虚拟模拟器(Oracle VM Virtual Box),为此我创建了一个
我创建了以下程序来读取 5 个数字,然后 dumpreg查看输入的数字... INCLUDE Irvine32.inc .data count = 5 scor
如何在保护模式下执行 IN 和 OUT 等受限指令? 我发现它需要足够高的特权级别(CPL)才能执行 IO 指令。我怎样才能在内核模式下运行,拥有 IO 权限或任何其他可能对我有帮助的东西? - 我希
目录 C# 程序集、模块和类型概念及关系 概述 程序集 模块 类型 程序集、模块和类型的关系 总结 引用
构建 maven assembly ,我留下了这样的东西: ${project.basedir} / LICENS
我的应用程序由几个核心程序集和几个扩展/插件程序集组成。为了让 MEF 知道插件必须提供的所有部件,即使我永远不会使用它们的任何部件,我也必须加载这些程序集。这使得应用程序需要更多时间来启动(如果我要
我对我们的构建基础结构有一个非常具体的要求,即将另一个 JAR 依赖项的一些内容复制到我的 Web 应用程序的特定子文件夹中。我们正在使用 maven-assembly-plugin,一个自然的方法是
为什么下面的指令会设置符号标志? mov al,0FEh sub al,2 据我了解,AL寄存器可以保存2^8 - 1或255。0FEh = 254(十进制)。减去 2 叶 252。这似乎是正数。 (
我以前使用过 NUnit,但已经有一段时间了,而且从来没有在这台机器上使用过。我在 Program Files 下解压了 2.4.8 版本,并且在尝试加载测试时不断收到此错误。 Could not l
我说的是一个使用 C# 进行游戏编程的小型游戏引擎。所以,我有一个嵌入单声道运行时的 C++ 应用程序(我称之为“启动器”)。我有一个用 C# 编写的程序集,它是我的游戏引擎类库。启动器按照 Embe
我对汇编相当陌生,并尝试从标准输入读取值(从 C 调用 scanf 函数)并将其打印回标准输出(使用 printf)。 .text readstr: .asciz "%d" #strin
谢谢帮助,我的问题是关于从下面的代码中收到的 ax 值? mov al,22h mov cl,0fdh imul cl 真机结果:ff9a 我的预期:00:9a(通过二进制相乘) 第一个数字是 22h
我正在开发一个汇编程序,该程序将整个文本文件读入缓冲区,然后将其显示在控制台中。它立即显示 24 行(每行的最大长度为 80,因为我使用 80 宽 * 25 高的 dossbox )然后等待用户输入,
我正在使用一个简单的程序集片段,使用 BIOS 作为引导加载程序的一部分将字符打印到屏幕上。这是引导加载程序代码。 [org 0x7c00] [bits 16] %include "a20_check
我只是想知道这段代码是什么意思: XOR EAX,EBX XOR EBX,EAX XOR EAX,EBX 最佳答案 那是 xor swapping . 在寄存器上执行它不会遇到常见的难看的失败案例。
我在新电脑上的 XNA 项目开始出现奇怪的错误。我有两个关于解决方案的项目和一个由它们使用的库。其中一个项目,一个 XNA 游戏项目,运行完美。另一个项目是 WindowsForm 和 XNA 的混合
是的,我正在努力实现类似的目标 __asm__(jmp label;); 其中 label 应替换为内存中保存的字符串值(结构体的字段)。 有没有办法做到这一点(或类似的方法可以让我跳转到运行时确定的
我是一名优秀的程序员,十分优秀!