[EXTERNAL] [edk2-devel] [PATCH v4 1/3] SecurityPkg: add RpmcLib and VariableKeyLib public headers
Wang, Jian J
jian.j.wang at intel.com
Thu Mar 26 07:41:22 UTC 2020
I agree to change the function name to be more specific to avoid confusion, since this lib is intended
to be used for variable service only. I'll send v5 soon.
Regards,
Jian
From: Yao, Jiewen <jiewen.yao at intel.com>
Sent: Wednesday, March 25, 2020 5:55 PM
To: Bret Barkelew <Bret.Barkelew at microsoft.com>; devel at edk2.groups.io; Wang, Jian J <jian.j.wang at intel.com>
Cc: Zhang, Chao B <chao.b.zhang at intel.com>; Mistry, Nishant C <nishant.c.mistry at intel.com>
Subject: RE: [EXTERNAL] [edk2-devel] [PATCH v4 1/3] SecurityPkg: add RpmcLib and VariableKeyLib public headers
Good point.
I think the original design limits the usage to be variable driver. As such, the API only gets a "variable root key".
A "platform root key" can derive the "variable root key" and some "other features' root key".
The tricky part is to regenerate the key, when the variable is under attack.
In that case, we want to only regenerate the "variable root key", instead of "platform root key".
That's why we want to introduce a variablekeylib module.
To make API consistent, maybe we should rename GetVariableRootKey() to GetVariableKey(), RegenerateKey() to RegenerateVariableKey(), and LockKeyInterface() to LockVariableKeyInterface()
If we really want to create a generic platformkeylib module, then we need add a key indicator. Such as:
EFI_STATUS
EFIAPI
GetPlatformKey (
IN GUID *KeyIndicator,
OUT VOID **PlatformKey,
IN OUT UINTN *PlatformKeySize
);
Then the variable driver can pass a GUID, and any other feature driver can pass anther GUID.
Thank you
Yao Jiewen
From: Bret Barkelew <Bret.Barkelew at microsoft.com<mailto:Bret.Barkelew at microsoft.com>>
Sent: Wednesday, March 25, 2020 1:44 AM
To: devel at edk2.groups.io<mailto:devel at edk2.groups.io>; Wang, Jian J <jian.j.wang at intel.com<mailto:jian.j.wang at intel.com>>
Cc: Yao, Jiewen <jiewen.yao at intel.com<mailto:jiewen.yao at intel.com>>; Zhang, Chao B <chao.b.zhang at intel.com<mailto:chao.b.zhang at intel.com>>; Mistry, Nishant C <nishant.c.mistry at intel.com<mailto:nishant.c.mistry at intel.com>>
Subject: RE: [EXTERNAL] [edk2-devel] [PATCH v4 1/3] SecurityPkg: add RpmcLib and VariableKeyLib public headers
Is there a reason this needs to be called "VariableKeyLib" rather than any other "KeyLib"? It seems general-purpose as an interface.
- Bret
________________________________
From: devel at edk2.groups.io<mailto:devel at edk2.groups.io> <devel at edk2.groups.io<mailto:devel at edk2.groups.io>> on behalf of Wang, Jian J via Groups.Io <jian.j.wang=intel.com at groups.io<mailto:jian.j.wang=intel.com at groups.io>>
Sent: Monday, March 23, 2020 11:35:21 PM
To: devel at edk2.groups.io<mailto:devel at edk2.groups.io> <devel at edk2.groups.io<mailto:devel at edk2.groups.io>>
Cc: Jiewen Yao <jiewen.yao at intel.com<mailto:jiewen.yao at intel.com>>; Chao Zhang <chao.b.zhang at intel.com<mailto:chao.b.zhang at intel.com>>; Nishant C Mistry <nishant.c.mistry at intel.com<mailto:nishant.c.mistry at intel.com>>
Subject: [EXTERNAL] [edk2-devel] [PATCH v4 1/3] SecurityPkg: add RpmcLib and VariableKeyLib public headers
> v4: remove CounterId which should not be exposed
REF: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2594&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305504454&sdata=wCxxsc6cc%2Ffduq88XOZOZv6debpAQMZiIdsFjD0zHXE%3D&reserved=0
RpmcLib.h and VariableKeyLib.h are header files required to access RPMC
device and Key generator from platform. They will be used to ensure the
integrity and confidentiality of NV variables.
Cc: Jiewen Yao <jiewen.yao at intel.com<mailto:jiewen.yao at intel.com>>
Cc: Chao Zhang <chao.b.zhang at intel.com<mailto:chao.b.zhang at intel.com>>
Cc: Nishant C Mistry <nishant.c.mistry at intel.com<mailto:nishant.c.mistry at intel.com>>
Signed-off-by: Jian J Wang <jian.j.wang at intel.com<mailto:jian.j.wang at intel.com>>
---
SecurityPkg/Include/Library/RpmcLib.h | 42 ++++++++++++++
SecurityPkg/Include/Library/VariableKeyLib.h | 59 ++++++++++++++++++++
SecurityPkg/SecurityPkg.dec | 8 +++
3 files changed, 109 insertions(+)
create mode 100644 SecurityPkg/Include/Library/RpmcLib.h
create mode 100644 SecurityPkg/Include/Library/VariableKeyLib.h
diff --git a/SecurityPkg/Include/Library/RpmcLib.h b/SecurityPkg/Include/Library/RpmcLib.h
new file mode 100644
index 0000000000..8e3868516c
--- /dev/null
+++ b/SecurityPkg/Include/Library/RpmcLib.h
@@ -0,0 +1,42 @@
+/** @file
+ Public definitions for the Replay Protected Monotonic Counter (RPMC) Library.
+
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _RPMC_LIB_H_
+#define _RPMC_LIB_H_
+
+#include <Uefi/UefiBaseType.h>
+
+/**
+ Requests the monotonic counter from the designated RPMC counter.
+
+ @param[out] CounterValue A pointer to a buffer to store the RPMC value.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to update the counter.
+ @retval EFI_UNSUPPORTED The operation is un-supported.
+**/
+EFI_STATUS
+EFIAPI
+RequestMonotonicCounter (
+ OUT UINT32 *CounterValue
+ );
+
+/**
+ Increments the monotonic counter in the SPI flash device by 1.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to update the counter.
+ @retval EFI_UNSUPPORTED The operation is un-supported.
+**/
+EFI_STATUS
+EFIAPI
+IncrementMonotonicCounter (
+ VOID
+ );
+
+#endif
\ No newline at end of file
diff --git a/SecurityPkg/Include/Library/VariableKeyLib.h b/SecurityPkg/Include/Library/VariableKeyLib.h
new file mode 100644
index 0000000000..fe642b3d66
--- /dev/null
+++ b/SecurityPkg/Include/Library/VariableKeyLib.h
@@ -0,0 +1,59 @@
+/** @file
+ Public definitions for Variable Key Library.
+
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _VARIABLE_KEY_LIB_H_
+#define _VARIABLE_KEY_LIB_H_
+
+#include <Uefi/UefiBaseType.h>
+
+/**
+ Retrieves the variable root key.
+
+ @param[out] VariableRootKey A pointer to pointer for the variable root key buffer.
+ @param[in,out] VariableRootKeySize The size in bytes of the variable root key.
+
+ @retval EFI_SUCCESS The variable root key was returned.
+ @retval EFI_DEVICE_ERROR An error occurred while attempting to get the variable root key.
+ @retval EFI_ACCESS_DENIED The function was invoked after locking the key interface.
+ @retval EFI_UNSUPPORTED The variable root key is not supported in the current boot configuration.
+**/
+EFI_STATUS
+EFIAPI
+GetVariableRootKey (
+ OUT VOID **VariableRootKey,
+ IN OUT UINTN *VariableRootKeySize
+ );
+
+/**
+ Regenerates the variable root key.
+
+ @retval EFI_SUCCESS The variable root key was regenerated successfully.
+ @retval EFI_DEVICE_ERROR An error occurred while attempting to regenerate the root key.
+ @retval EFI_ACCESS_DENIED The function was invoked after locking the key interface.
+ @retval EFI_UNSUPPORTED Key regeneration is not supported in the current boot configuration.
+**/
+EFI_STATUS
+EFIAPI
+RegenerateKey (
+ VOID
+ );
+
+/**
+ Locks the regenerate key interface.
+
+ @retval EFI_SUCCESS The key interface was locked successfully.
+ @retval EFI_UNSUPPORTED Locking the key interface is not supported in the current boot configuration.
+ @retval Others An error occurred while attempting to lock the key interface.
+**/
+EFI_STATUS
+EFIAPI
+LockKeyInterface (
+ VOID
+ );
+
+#endif
\ No newline at end of file
diff --git a/SecurityPkg/SecurityPkg.dec b/SecurityPkg/SecurityPkg.dec
index 5335cc5397..2cdfb02cc5 100644
--- a/SecurityPkg/SecurityPkg.dec
+++ b/SecurityPkg/SecurityPkg.dec
@@ -76,6 +76,14 @@
#
TcgStorageOpalLib|Include/Library/TcgStorageOpalLib.h
+ ## @libraryclass Provides interfaces to access RPMC device.
+ #
+ RpmcLib|Include/Library/RpmcLib.h
+
+ ## @libraryclass Provides interfaces to access variable root key.
+ #
+ VariableKeyLib|Include/Library/VariableKeyLib.h
+
[Guids]
## Security package token space guid.
# Include/Guid/SecurityPkgTokenSpace.h
--
2.24.0.windows.2
-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#56132): https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F56132&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305514447&sdata=CoBs9mwnHTAAZiErAEHS3E7dbdRd%2FZefJPKXKPmJwfc%3D&reserved=0
Mute This Topic: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fmt%2F72512084%2F1852292&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305514447&sdata=%2B14%2BIfGmu88GSnKZnpb51EGaW3MqfFCT1%2BWI5Bhdlo0%3D&reserved=0
Group Owner: devel+owner at edk2.groups.io<mailto:devel+owner at edk2.groups.io>
Unsubscribe: https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Funsub&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C3e34ac4a40d94c82e86b08d7cfbd8b82%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637206285305514447&sdata=JLLWLjx0OW0eTjn7xXG5aNHdAfWQqhY4qLXSuNhhcys%3D&reserved=0 [bret.barkelew at microsoft.com]
-=-=-=-=-=-=
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#56369): https://edk2.groups.io/g/devel/message/56369
Mute This Topic: https://groups.io/mt/72522973/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/edk2-devel-archive/attachments/20200326/b84601e1/attachment.htm>
More information about the edk2-devel-archive
mailing list