问题标签 [security-framework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
790 浏览

ios - OS X 的 SecRandomCopyBytes 分支安全吗?

许多用户空间 CSPRNG 有一个问题,在 之后fork(2),两个不同的进程可能返回相同的随机字节流。

从 看dtruss,很明显,SecRandomCopyBytes至少是从 播种/dev/random,但这样做的方式是否可以安全使用fork()

使用以下源代码:

我从中得到以下信息dtruss(删除了不相关的东西):

0 投票
1 回答
155 浏览

objective-c - 在 Cocoa 中不按按钮触发回调

我需要能够在不按默认提供的按钮的情况下启动此示例中的身份验证过程。

我要运行的操作是 -(void)buttonPressed 方法,但是如果我尝试手动调用它,插件就会崩溃。它是通过按下该按钮自动调用的,但如果能够按下回车就很好了。

0 投票
1 回答
2545 浏览

c - 使用 SecItemImport 导入 PKCS12

Apple 的OS X文档讨论了如何SecItemImport使用SecKeyRef. 函数签名如下所示:

以下代码将尝试加载包含单个 RSA 密钥的 PKCS12 字节数组:

要编译上述内容,您可以使用clang filename.c -framework Security -framework CoreFoundation.

此代码不返回错误(OSStatus 0),但无法使用已解析的SecKeyRef. 我已经尝试了很多不同的标志,但无法让它返回所需的数据。有谁知道我做错了什么?

0 投票
2 回答
2260 浏览

ios - SecAddItem 只返回 errSecParam,不管我做什么

出于某种原因,我无法让这个简单的钥匙串代码工作。

我已经检查了苹果关于此事的文档,并根据它:

传递给函数的一个或多个参数无效。

然而,该SecAddItem函数需要两个参数:

我将 NULL 传递给结果。根据 Apple 的文档,这是可以接受的:

结果返回时,对新添加项目的引用。结果的确切类型基于属性中提供的值,如下所述。如果不需要此结果,则传递 NULL。

所以我真的不知道我在这里做错了什么。我正在向它传递一个字典和一个 NULL 值。该函数需要两者,我将两者都提供。有人可以告诉我有什么问题吗?

作为参考,文档在这里

0 投票
1 回答
736 浏览

ios - iOS 安全框架与 kSecAttrKeyTypeEC 使用什么曲线?

我正在专门研究在安全框架中使用 SecKeyGeneratePair() 方法并在 params 字典中指定 [kSecAttrKeyType: kSecAttrKeyTypeEC]。

但我无法找到 Apple 文档中使用的 EC 曲线。

有没有办法指定使用什么曲线,或者我应该导入 openssl 代替?

0 投票
1 回答
1792 浏览

macos - 与 OS X 钥匙串关联的不可见文件

似乎钥匙串文件(带有扩展名.keychain)通常会有一个与之关联的不可见文件,位于同一目录中。

此不可见文件始终具有以下属性:

  • 它是空的(零字节)。
  • 它的权限是0444(对所有用户只读)。
  • 它的名称由.fl后跟 8 个十六进制字符组成。例如:

    /li>

不可见文件可以删除,但是下次修改钥匙串的内容时,将重新创建具有相同名称的不可见文件。

以下是使用钥匙串访问实用程序演示的一些步骤:

  1. 通过选择File > New Keychain并选择要在其中创建它的目录来创建一个新的钥匙串。将在与新钥匙串相同的目录中创建一个不可见文件。
  2. 删除不可见文件(使用 Finder 或终端)。
  3. 修改钥匙串的内容。例如,通过选择File > New Secure Note Item向钥匙串添加一个安全注释。将使用相同的名称重新创建不可见文件。
  4. 通过选择File > Delete Keychain > Delete References & Files 删除钥匙串。不可见的文件也将被删除。

我已经验证这发生在 OS X 10.810.9中。


更新

security在终端中使用 Apple 的工具操作钥匙串时会创建相同的不可见文件:

  1. 创建一个新的钥匙串。还会创建一个不可见的文件。

    /li>
  2. 删除不可见的文件。

    /li>
  3. 修改钥匙串的内容(例如:通过添加互联网密码)。以相同的名称重新创建不可见文件。

    /li>
  4. 删除钥匙串。不可见的文件也被删除。

    /li>

问题

  1. 为什么会创建这些不可见的文件?他们的目的是什么?
  2. 文件名中的含义是什么fl
  3. 文件名中的 8 个十六进制字符是什么?某种标识钥匙串的唯一 ID 或哈希?
  4. 有没有办法防止在创建或修改钥匙串时创建这些文件?
0 投票
0 回答
303 浏览

objective-c - Objective-C:strlen 返回错误的值

所以我使用这个问题的随机字符串生成解决方案。

然后我将结果保存到钥匙串,除了我得到EXC_BAD_ACCESS(code=EXC_I386_GPFLT),并且result包含 OSStatus 的变量是32767

我究竟做错了什么?我已经尝试strlen()在两者characters上运行generatedKey- 它总是返回一些荒谬的数字,以及运行简单[characters length]。我相信有问题 - 它应该返回 256。

我知道这可能很愚蠢,但我迷路了,谷歌也无济于事。

0 投票
1 回答
1994 浏览

objective-c - 从受信任的应用程序访问 OS X 钥匙串项目

我正在创建一个钥匙串,然后向其中添加一个带有预定义的受信任应用程序列表的项目:

当我使用 Keychain Access 应用程序打开新创建的钥匙串时,我可以在受信任的应用程序列表中看到我的应用程序:

acl 设置

问题是,当我尝试通过一个受信任的应用程序从该钥匙串中读取密钥时

genericPassErr等于-25293,这意味着 Error: 0xFFFF9D33 -25293 The user name or passphrase you entered is not correct.

在代码的前面,我运行SecKeychainSetUserInteractionAllowed(0),如果我注释掉这一行,系统会提示我允许应用程序访问钥匙串,如果我授予它,一切运行正常。但是,重点是我需要能够在不提示用户的情况下做到这一点。我希望它能够像这样工作,因为我将应用程序添加到 ACL。你知道我做错了什么吗?

当我在附加的屏幕截图中勾选“所有程序都可以访问此项目”单选框时,一切都没有提示。但我不希望每个人都能够访问它,只是列出的应用程序。

0 投票
1 回答
925 浏览

ios - 在 iOS 中达到 AES128/CBC/PKCS5

我必须调用具有以下加密要求AES128/CBC/PKCS5Padding的安全服务器,但 iOS 中可用的 CCCrypt 或 CommonCrypto 库提供具有 CBC 模式的 PKCS7Padding。

任何想法我如何实现这种加密,因为服务器是第三方,它的实现不能改变。我正在使用自定义 IV。

请求代码在这里。

回应说:

0 投票
2 回答
827 浏览

ios - 以加密格式获取钥匙串密码

我正在开发一个 iOS 应用程序,它使用 Keychain、Security.framework 和 Apple 的 KeychainWrapper 类将用户密码安全地存储在我的应用程序中。

该应用程序允许用户创建帐户。当用户创建帐户时,应用程序需要将用户密码的加密版本发送到我的服务器(POST 请求)。

这一切都有效,但我遇到的问题是我可以安全地存储数据并检索它,但我不知道如何检索我的数据的加密版本。

换句话说,假设用户创建了一个帐户并将密码设置为“hello”。然后我将应用程序设置为将其安全地存储在钥匙串中。

因此,iOS 对其进行加密并将其存储在钥匙串中。为了这个问题,让我们假设加密版本是“h235llo”。

现在,当我想将密码发送到我的服务器时,我不想发送“你好”。我想发送“h235llo”(加密字符串)。如何访问加密字符串?

这是我用来访问钥匙串的代码:

为了安全地将用户名/密码存储到钥匙串,我这样做:

为了从钥匙串中安全地检索用户名/密码,我正在这样做:

对此问题的任何帮助将不胜感激。

谢谢你的时间,丹。